2

この疑似クラスを使用して、サーバーへの Ajax リクエストを作成します。

function RequestManager(url, params, success, error){
    //Save this Ajax configuration
    this._ajaxCall = null;
    this._url= url;
    this._type = params.type;
    this._success = function(){
        alert("ok");
    };
    this._error = function(){
        alert("ko");
    };
}

RequestManager.prototype = {
    require : function(text){
        var self = this;
        this._ajaxCall = $.ajax({
            url: this._url,
            type: this._type,
            data: text,
            success: function(xmlResponse){
                var responseArray = [];
                var response = _extractElements(xmlResponse, arrayResponse);
                self._success(response);
            },
            error: self._error,
            complete : function(xhr, statusText){
                alert(xhr.status);
                return null;
            }
        });
    }

ロードされる PHP は次のとおりです。

<?php
    header('Content-type: text/xml');

    //Do something
    $done = true;

    $response = buildXML($done);
    $xmlString = $response->saveXML();
    echo $xmlString;

    function buildXML ($done){
        $response = new SimpleXMLElement("<response></response>");
        if($done){
            $response->addChild('outcome','ok');
        }
        else {
            $response->addChild('outcome', 'ko');
        }
        return $response;
    }

新しいオブジェクトをインスタンス化し、それを使用してリクエストをロードすると、常にエラーが返され、ステータス コードは 0 になります。サーバーは XML ドキュメントを正しく生成します。正しい 200 コードを取得できないのはなぜですか?

4

1 に答える 1

2

への2回目の呼び出しでこれが発生した場合は、へrequireの呼び出しabort()により、ステータスコード0でコールバックが呼び出されるためです。後で2番目のリクエストに対して正しい結果を取得する必要があります。

successjQuery 1.4には、リクエストが中止された後にコールバックが呼び出されるというバグもあります。競合状態で定期的に空に戻るリクエストに対する私の回答を参照してください。

この問題とは関係なく、コード(timerおよびajaxCall)には、先頭にアンダースコアがある場合とない場合の両方で参照されているように見える変数があります。

于 2010-04-19T17:33:38.143 に答える