2012-06-26 53 views
0

我已经使用jQuery构建了一个简单的模式,它使用一个url,然后使用ajax方法加载它,并将响应html插入到div中,并在屏幕上显示一个模态框。简单的东西!在页面加载时在模态框中加载某些页面

但是,这些页面是实际的URL,例如domain.com/posts/add,并且可以通过浏览器直接访问,而不仅仅是点击应用内的链接。我宁愿他们始终以模式显示,即使用户在地址栏输入网址。目前我做到这一点,如果请求不是阿贾克斯,然后将其重定向到主页或显示404以防止发生这种情况。

如果用户通过HTTP直接访问这些页面,那么我宁愿将这些页面加载到模式中,方法与Chrome商店执行此操作时的方式相同。 https://chrome.google.com/webstore/detail/pjkljhegncpnkpknbcohdijeoejaedia

我该怎么做?不必做一些非常麻烦的JavaScript?任何想法或建议,将不胜感激。请注意,这应该像一个适当的应用程序,它允许用户使用来回按钮和模式应该出现和消失

至于我用的是模态代码...

这是非常简单,这是它看起来如何的一个例子(注意我的代码比这更简单,代码纯粹是为了简单)。

回答

0

首先,我会用.get()来代替。

第二,如果你使用的是完整的URL从另一个域,其最有可能是由于在上面的链接中提到的安全问题:

由于浏览器的安全限制,大多数“Ajax”的请求都受到了same origin policy ;该请求无法成功从不同的域,子域或协议中检索数据。

除非你使用JSONP,我怀疑你是谁。

+0

什么?谁说另一个域名:/我说我怎样才能做到这一点,以便我通常使用AJAX加载到模式中的页面在通过URL作为HTTP请求直接访问时也会加载到模式中。 – Cameron

+0

你做了,当你把你的问题完整的网址。 –

+0

完整的网址是因为用户可以通过网址访问模式中加载的页面,例如它是一个通过HTTP访问的实际页面,以及XMLHttp,这是我的观点!我从来没有说过它是在另一个域名! – Cameron

0

Okies想出如何做到这一点:

它需要一个MVC框架,这样做正确IMO,我看不出它是如何可能的老式网页由于其静态性质,但基本上这个想法是你的意见必须继承其他意见,例如:

你有两个意见的人和表格添加人的列表。但是,这些都从另一个视图继承,如列表或模式,以便当用户使用HTTP请求添加人时,它将加载表单,但使用继承列表,以便创建所需的效果。所以有效的逻辑都是在控制器中完成的。

关于继承的一篇很棒的文章在这里:http://mark-story.com/posts/view/view-inheritance-in-cakephp CakePHP这是我使用的另一个框架。

希望这对其他人想要尝试这一点有意义,但只是试了一下,它就像一种享受!

更新:在考虑了这一点之后,我决定继承比需要复杂得多,并且没有完全复制模式,因为让模态出现在DOM的底部需要。在意见中有很多复杂的结构!

我的替代计划是做在控制器中的XMLHTTP检查,如果它不然后在列表视图,而不是形式,而是用一个查询字符串或类似的JSON然后使用AJAX的预期加载加载从网址查看。这可能听起来像是你应该得到的同一页面的双重请求,但它完成了这项工作。

唯一的问题是,你不能通过发送视图和JSON告诉它加载到其他视图模态...任何想法如何做到这一点?除了传递查询字符串?


更新:2

我越去想它,它似乎更好地做到继承,因为它是不能够实际做到这一点怎么我虽然尽量使用JSON我可以告诉...

0

你有没有考虑过使用hashtag或url变量来表示页面应该如何加载?从我在Chrome浏览器中看到的所有模式窗口都位于详细子目录中,而其他区域则是类别或搜索。该窗口位置可能表示页面的显示方式。