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、それはうまくいきます。これは、POST の代わりに GET を使用することの単なる副作用だと思いますか? それですか、それとも私がチェックしていない他の何かですか。

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 に答える