我正在使用Dojo 1.7.2并尝试以下代码
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 :(得分: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;
}
答案 1 :(得分: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'
});