2012-07-19 55 views
0

我使用道場1.7.2,我嘗試下面的代碼道場XHR得到不設置的XmlHttpRequest

var request = xhr.get({ 
     url: location, 
     content : content, 
     load : function(data){ 
      for(var x in data) 
       { 
        alert (x + data[x]); 
       } 
     }, 
     error : function() 
     { 
      alert('Had an eror'); 
     }, 
     handleAs : 'json' 
    }); 

然後在PHP我做了以下嘗試,並檢測了XMLHttpRequest

function isAjax(){ 

    $ajax = (isset($_SERVER[ 'HTTP_X_REQUESTED_WITH' ])) && 
     (strtolower($_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest'); 

    return $ajax; 
} 

但isAjax函數返回false。

如果我做xhr.post那麼它工作正常。我在想這只是使用GET而不是POST的副作用?這是它還是別的東西,我沒有檢查。

回答

0

這是不是一個標準,這個頭被追加 - 因爲它是在大多數情況下無關的開銷。

你需要自己設置標題 - 並且可以稱它爲真正的任何你想要的。你想要的是headers: { "X-Requested-With": "XMLHttpRequest" }

var request = xhr.get({ 
    url: location, 
    content : content, 
    headers: { "X-Requested-With": "XMLHttpRequest" }, // << < add this 
    load : function(data){ 
     for(var x in data) 
      { 
       alert (x + data[x]); 
      } 
    }, 
    error : function() 
    { 
     alert('Had an eror'); 
    }, 
    handleAs : 'json' 
}); 
+0

對不起,我還沒有機會測試這一點,但現在你提到它看起來非常有前途,相當明顯。但是,爲什麼它包含在發佈請求中,而不是在GET請求中? – 2012-07-25 04:07:31

+0

鍛鍊得很好。我使用下面提供的函數也做了更徹底的ajax測試。 – 2012-07-25 06:04:47

1

該解決方案是基於Zend Framework的版本。

function isAjax() { 
    $header = 'X_REQUESTED_WITH'; 

    // Try to get it from the $_SERVER array first 
    $temp = 'HTTP_' . strtoupper(str_replace('-', '_', $header)); 
    if (isset($_SERVER[$temp])) { 
     return $_SERVER[$temp] == 'XMLHttpRequest'; 
    } 

    // This seems to be the only way to get the Authorization header on 
    // Apache 
    if (function_exists('apache_request_headers')) { 
     $headers = apache_request_headers(); 
     if (isset($headers[$header])) { 
      return $headers[$header] == 'XMLHttpRequest'; 
     } 
     $header = strtolower($header); 
     foreach ($headers as $key => $value) { 
      if (strtolower($key) == $header) { 
       return true; 
      } 
     } 
    } 

    return false; 
} 
+0

我試過了,但應該是頂部的$header = 'X-REQUESTED-WITH'。除此之外,它工作得很好。 – 2012-07-25 05:29:25