2014-10-27 69 views
3

我想建立一個函數,根據結果調用一些事件處理函數,就像jQuery的$.ajax()一樣。例如,你可以定義這個Ajax代碼:如何構建類似jQuery的事件?

$.ajax(
{ 
    url: "http://domainname.tld", 
    type: 'GET' 
}).done(function(e) 
{ 
    //succed 

}).fail(function(e) 
{ 
    //error 
}); 

我想獲得這些

.done(function(e) 
    { 
     //succed 

    } 

塊與我的功能工作。指着我

SendRequest("someArg1", "someArg2") 
.onSuccess(
    function(returnValue) 
    { 
     alert(returnValue); 
    }) 
.onError(function(returnValue) 
{ 
    alert(returnValue); 
}); 

感謝:目前,我做這樣的事:

function SendRequest(arg1, arg2, onSuccess, onError) 
{ 
    if(true) 
    { 
     onSuccess(true); 
    } 
    else 
    { 
     onError(false); 
    } 
} 

,不得不這樣稱呼它

SendRequest("someArg1", "someArg2", function(returnValue) { alert(returnValue); }, function(returnValue) { alert(returnValue); }); 

,並想這樣稱呼它在正確的方向!

+1

你可以看看[Q諾(HTTPS: //github.com/kriskowal/q) – 2014-10-27 09:22:59

+1

我認爲[jquery.Deferred](http://api.jquery.com/category/deferred-object/)就是你要找的 – hindmost 2014-10-27 09:32:39

回答

0

感謝@arun-p-johny@hindmost爲我提供了正確的關鍵字來搜索並最終解決我的問題!

閱讀this偉大的文章後,我想出了以下解決方案:

function AsyncMethod(arg1, arg2) 
{ 
    var deferred = $.Deferred(); 

    //Do your work 
    if(arg1 == arg2) 
    { 
     // true represents the result, optional 
     deferred.resolve(true); 
    }else{ 
     // Something went wrong, reject. (false is still the result, therefor it's also optional) 
     deferred.reject(false); 
    } 

    return deferred.promise(); 
} 

,並調用它像這樣:

$.when(
    AsyncMethod(true, false) 
    .done(function (returnValue) 
    { 
     alert(arg1 + " == " + arg2); 
    }) 

    .fail(function (returnValue) 
    { 
     alert(arg1 + " != " + arg2); 
    }); 
); 
相關問題