我有一个消息系统,我使用jQuery.load
进行无限滚动。问题是我设置它的方式,当jQuery.load
的响应返回时,页面中的所有JS再次运行。这没关系,但我想只在请求是AJAX(jQuery.load
)时才禁用特定的JS块。
是否可以做这样的事情?
if(!request_is_ajax){
run_some_code();
}
else{
// do nothing
}
基本上代码应该在主页面加载上运行,而不是在后续调用上运行。我可以检测到这个服务器端,但这对我来说是最后的选择。
答案 0 :(得分:1)
对于后续调用(即页面加载后的ajax调用),附加类似?ajax或& ajax的内容,并在服务器端检查相同内容,以了解该请求是否是Ajax请求。
// a server side php code sample
$request_is_ajax= @$_GET['ajax']?true:false;
if(!$request_is_ajax){
run_some_code();
}
else{
// do nothing
}
答案 1 :(得分:1)
一旦加载了所需的代码,就可以将全局js变量设置为false,然后在代码再次执行时检查它是否为真。 我不认为这里有一段代码片段。
答案 2 :(得分:0)
如果您使用jQuery
,则可以查看$_SERVER['HTTP_X_REQUESTED_WITH']
,XMLHttpRequest.
将设置为jQuery
这是使用XMLHttpRequest
时最可靠的方法,因为/* decide what the content should be up here .... */
$content = get_content(); //generic function;
/* AJAX check */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
/* special ajax here */
die($content);
}
/* not ajax, do more.... */
是发出请求的JavaScript对象。但是现在名字很差,因为你可以随心所欲地发送它。
示例代码:
{{1}}
答案 3 :(得分:0)
你可以检查Responseheader,因为$ .ajax将发送一个jqXHR(jQueryXMLHttpRequest)。
声明如下:
if( jqXHR.getResponseHeader('content-type').indexOf('text/html') >= 0 ) {
...
}
有关详细信息,您可以查看this stackoverflow answer