如何从JS检测请求是否是AJAX

时间:2014-04-30 11:10:20

标签: javascript jquery ajax

我有一个消息系统,我使用jQuery.load进行无限滚动。问题是我设置它的方式,当jQuery.load的响应返回时,页面中的所有JS再次运行。这没关系,但我想只在请求是AJAX(jQuery.load)时才禁用特定的JS块。

是否可以做这样的事情?

if(!request_is_ajax){
    run_some_code();
}
else{
    // do nothing
}

基本上代码应该在主页面加载上运行,而不是在后续调用上运行。我可以检测到这个服务器端,但这对我来说是最后的选择。

4 个答案:

答案 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