0

我正在使用 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 的副作用?是它还是我没有检查的其他东西。

4

2 回答 2

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;
}
于 2012-07-23T18:33:38.047 回答
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'
});
于 2012-07-20T12:59:47.377 回答