2014-04-30 60 views
0

我有一个消息系统,我使用jQuery.load无限滚动。问题是,我设置它的方式,当jQuery.load的响应返回时,页面中的所有JS再次运行。这很好,但是我只想在请求是AJAX的情况下禁用特定的JS块(jQuery.load)。如何检测请求是否来自AJAX AJAX

是否有可能做到这样的事情?

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

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

+2

也许你可以设置一个全局的js变量为false,一旦你加载了你想要的代码,然后再次检查代码是否为真。 – Bobby5193

+0

@ Bobby5193如果您愿意发表评论作为答案,我很乐意接受它。工作很好。不知道为什么我没有想到这一点。 –

+0

好的,我刚刚做了:) – Bobby5193

回答

1

您可以在全球JS变量设置为false,一旦你下载你想要的代码,然后当代码再次执行时检查它是否为真。 我不认为这里真的需要代码片段。

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 
    } 
0

如果使用jQuery,你可以检查$_SERVER['HTTP_X_REQUESTED_WITH'],这将被设置为XMLHttpRequest.这是使用jQuery时,因为XMLHttpRequest是JavaScript对象发出请求的最可靠方法。但现在它的命名很差,因为你可以随意发送任何你想要的东西。

示例代码:

/* 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.... */ 
0

可以在Responseheader检查,因为$阿贾克斯将发送jqXHR(jQueryXMLHttpRequest)。

声明将是这样的:

if(jqXHR.getResponseHeader('content-type').indexOf('text/html') >= 0) { 
    ... 
    } 

欲了解更多信息,你可以看一下this stackoverflow answer