我使用jQuery构建了一个简单的模态,它接受一个url,然后使用ajax方法加载它,并将响应html插入到我在模式框设计中在屏幕上显示的div中。简单的东西!
然而,这些页面是实际的网址,例如domain.com/posts/add
可以直接通过浏览器访问,而不仅仅是点击应用中的链接。我希望它们始终以模态显示,即使用户将URL键入地址栏也是如此。目前我这样做,如果请求不是Ajax,那么将它们重定向到主页或显示404以防止这种情况发生。
如果用户通过HTTP直接访问这些页面,我希望将这些页面加载到模式中,就像Chrome商店执行此操作一样。 https://chrome.google.com/webstore/detail/pjkljhegncpnkpknbcohdijeoejaedia
虽然如何做到这一点?没有必要做一些非常混乱的JavaScript?任何想法或建议将不胜感激。请注意,这应该像一个适当的应用程序,因为它允许用户使用来回按钮,模式应该出现和消失
至于我使用的模态代码......
它非常简单,这是它看起来的一个例子(注意我的内容比这更强大,代码纯粹是为了简单)
$('.ajax-link').click(function(e){
e.preventDefault;
$.ajax({
url: $(this).attr('href'),
success: function(response) {
$('<div id="modal">' + response + '</div>').appendTo('body');
}
});
});
答案 0 :(得分:0)
首先,我会改用.get()。
其次,如果您使用其他域中的完整网址,则很可能是由于上述链接中提到的安全问题:
由于浏览器安全限制,大多数“Ajax”请求都受same origin policy的约束;请求无法成功从其他域,子域或协议中检索数据。
除非你使用JSONP
,否则我怀疑你是谁。
答案 1 :(得分:0)
Okies想出了如何做到这一点:
它需要一个MVC框架才能正确地执行此操作IMO,因为我无法看到老式页面由于其静态特性而如何实现,但基本上这个想法是您的视图必须从其他视图继承,例如:
您有两个视图,其中包含用于添加人员的人员和表单。但是这些都继承自另一个视图,例如list或modal,这样当用户使用HTTP请求添加者时,它会加载表单但使用继承的列表,以便创建所需的效果。因此,逻辑完全在控制器中完成。
关于继承的一篇很棒的文章:CakePHP的http://mark-story.com/posts/view/view-inheritance-in-cakephp,这是我使用的另一个框架。
希望对于想要尝试这一点的其他人有意义,但只是尝试了它,它就像一种享受!
更新:在考虑了这个之后,我已经确定继承比需要复杂得多,并且没有完全复制模态,因为让模态出现在DOM的底部需要......视图中有很多复杂的结构!
我的替代方案是在控制器中执行XMLHttp检查,如果不是,则在列表视图中加载而不是使用查询字符串或类似JSON之类的表单BUT,然后使用AJAX加载到目标中从网址查看。这可能听起来像是您应该获得的同一页面的双重请求,但它确实起作用。
唯一的问题是,您无法通过视图和JSON发送信息告诉它将其他视图加载到模态中...任何想法如何做到这一点?除了传递查询字符串?
更新:2
我想的越多,做继承似乎更好,因为实际上我不可能这样做,尽管我尽可能地使用JSON ......
答案 2 :(得分:0)
您是否考虑使用hashtag或url变量来表示页面应如何加载?从我在谷歌浏览器中看到的所有模态窗口都在详细子目录中,而其他区域是类别或搜索。该窗口位置可能表示页面的显示方式。