我刚开始创建一个PHP / AJAX网站,我想知道我应该在哪里添加功能“仅包含内容”。
我的页眉和页脚脚本中是否应该使用if语句来检查“ContentOnly” get参数?然后将该参数附加到我的AJAX调用中的查询字符串中?
或者我应该在AJAX端使用过滤器来仅获取主要内容Div。就像在jquery中一样:
$(this).load("/myPhpPage.php #mainContentDiv")
第一种方法会更快吗? 但第二种方法是将AJAX功能保留在表示方面,而不是我的PHP。
还是有第三种方法吗?我想保持我的PHP脚本完整,所以如果oyu直接转到它们,页眉和页脚就在那里。提前谢谢!
答案 0 :(得分:7)
请不要为了使用AJAX而使用AJAX。
也就是说,大多数AJAX库传递X-Requested-With
HTTP标头,表明它是一个AJAX请求。您可以使用该标头来决定是否包含页眉/页脚等。
答案 1 :(得分:1)
根据您用于处理页面请求的范例,我通常建议您将此类处理放在控制器脚本中。处理特定于正在进行的请求类型的视图呈现逻辑完全适合放置在控制器层中。
正如ceejayoz建议的那样,您可以使用X-Requested-With标头(确保它已被您的javascript库的ajax函数传递!)以在控制器脚本中验证请求的来源是什么,然后呈现适当地看待。
答案 2 :(得分:1)
除了说什么之外,你的应用程序不应该知道渲染的视图。如果您正在使用javascript进行调用--javascript应该知道调用的上下文。
这意味着返回处理程序应该知道它们在回调期间处理的是什么。我发现这些类型的事务的最佳方法是用JSON打包对象,描述被调用的是什么以及谁调用它。然后,当返回内容时,您可以将其中一些属性附加到返回的对象。例如,如果对所有内容使用相同的回调处理程序,则只需在此返回的对象中传递上下文的引用即可。
但是,不要使用AJAX,除非它有实际用途。
答案 3 :(得分:0)
X-Requested-With标题的一个地方对我来说非常方便:
非常低级别的身份验证类型方法,它将重定向到登录页面...当通过AJAX发出请求时,重定向是一个坏主意 - 我想返回一个带有错误响应的XML有效负载,所以我抛出一个异常代替。是的,我可以让身份验证总是抛出,但是我必须在每个页面中实现处理并在那里进行重定向。使用X-Requested-With,我可以充分利用这两个世界。
答案 4 :(得分:-2)
X-Requested-With HTTP
表示其Ajax请求相当多余。 Ajax调用永远不应该像浏览器那样请求HTML!
在大多数情况下,AJAX调用不应该返回HTML或纯文本。确保在对页面发出请求时指定正确的mime-type,并在页面上切换所使用的mime类型。这样,当浏览器请求HTML时,它会在AJAX调用请求XML或JSON时获取HTML,或者如果您必须是纯文本,它将获得该格式的数据。
编辑:在这种情况下,AHAH确实是一个更好的术语(技术性)。我认为内容是OP中的数据,这就是我推动mime-type这么多的原因。
但我仍然认为通过ajax获取 ALL 内容是一个糟糕的设计,你会失去更多的收益。如果需要,最好转到新页面并在内容中公开一些AJAX功能。
如果那个功能AHAH是一个不需要在历史记录中推送的小错误框(例如,内容确实如此),那么即使是我的正统思想也能够实现这一点:)
即使你有一个需要大量计算的标题(即树视图),还有其他缓存选项可以使javascript-abled和-disabled一样受益,只假设只有javascript-abled。
感谢btw的评论,我真的不想像现在这样对待,但我可以看到我发现的那个音符就是那个。