0

$.when()コールバックを受け取ったときに他の操作を実行できるように、内部でjQueryAJAX呼び出しを行おうとしています。しかし、残念ながら、AJAX呼び出しを成功させるために呼び出しているメソッドからコールバックを取得していません。以下はコードです...

/****** Code which calls the function ******/

var pathString = "/Cities?state=" + whichState;

$.when(makeAJAXRequest(pathString)).done(function(data)
{
    alert(data);                  //Shows undefined

    //Other operations ..... 
}

/****** My function which makes the AJAX call ******/

function makeAJAXRequest(pathString)
{

$.ajax({
        type:'GET',
        async:'false',
        cache:false,
        url:'./proxy.php',
        data:{path:pathString},         //Can put the query-string in the path. But if put in data attribute, it will work with both GET and POST
        dataType:'xml',
        success:function(data)
        {
    //alert(data);

    return data;
    },
    error:function(xhr, textStatus, errorThrown)
    {
    alert("Error in AJAX request: " + textStatus + errorThrown);

    return ("Error in AJAX request: " + textStatus + errorThrown);
    }
});

}
4

2 に答える 2

0

問題は、実際には makeAjaxRequest() メソッドで遅延オブジェクトを返していないことです。

次のようになります。

function makeAJAXRequest(pathString) {
    var deferred = new $.Deferred();
    $.ajax({
        type:'GET',
        async:'false',
        cache:false,
        url:'./proxy.php',
        data:{path:pathString}
        dataType:'xml',
        success:function(data) {
            // Deferred object success
            return deferred.resolve(data);
        },  
        error:function(xhr, textStatus, errorThrown) {
            alert("Error in AJAX request: " + textStatus + errorThrown);
            // Deferred object reject
            return deferred.reject("Error in AJAX request: " + textStatus + errorThrown);
        });
    return deferred.promise();
    }

Deferred のドキュメントを詳しく見てください: http://api.jquery.com/category/deferred-object/

于 2013-02-06T23:11:36.810 に答える
0

では、オブジェクトhttp://api.jquery.com/jQuery.ajax/#jqXHRmakeAJAXRequest()を返すだけです。$.ajaxjqXHR

function makeAJAXRequest(pathString) {
    return $.ajax({
    // ...
    });
}
于 2013-02-06T23:22:52.580 に答える