2015-06-14 77 views
0

有人可以提供像做下面的使用jQuery一個更好的方式承諾:傳遞參數少輝

的問題是,我想通過與來自AJAX返回的數據額外的參數和修改前的數據恢復在另一個請求中再次發佈它。

var obj= $(this); 

$.get(
    "fetch_data1", 
    {}, 
    function(data){ 
    callback1(data, obj) 
    }); 

function callback1(data, obj){ 
    var anotherParam = "test" 

    $.get(
    "fetch_data2", 
    {"data":data, "q":obj.text()}, 
    function(data2){ 
     callback2(data, obj, anotherParam) 
    }); 
} 

function callback2(data2, obj, another_Param){ 
    obj.text(data2 + another_Param); 
} 
+0

所以你想傳遞一些_context_數據到回調? – Amit

+0

我想要做一些事情:promise1.then(getStuff).then(function(myServerScript2Data){//兩個promise均解析});但我需要通過除了由ajax調用返回的數據之外傳遞額外的參數。 – user759885

+1

呃,你實際上似乎沒有使用承諾,只是回調。 – Bergi

回答

1

jQuery.get是簡寫,它等效於:

jQuery.ajax({ 
    url: url, 
    data: data, 
    success: success, 
    dataType: dataType 
}); 

使用完整功能,可以提供上下文對象,並用它在你的回調函數是這樣的:

jQuery.ajax({ 
    url: 'fetch_data1', 
    data: {}, 
    context: { MyContext: $(this) }, 
    success: callback1 
}); 

function callback1(data) { 
    var context = this; 
    var whatever = context.MyContext.text(); 
}; 

您的上下文對象可以像您需要的那樣精細,包含您需要傳入回調函數的任何數據。

0

不是deferred.then()(https://api.jquery.com/deferred.then/)你在找什麼?你的代碼可以被重寫爲這樣的:

var obj= $(this); 

$.get("fetch_data1_url") 
.then(function(data1){ 
    return callback1(data1, obj); 
}) 
.then(function(data2) { 
    var anotherParam = "test"; 

    callback2(data2, obj, anotherParam); 
}); 

function callback1(data1, obj){ 
    return $.get(
     "fetch_data2_url", 
     { "data": data1, "q": obj.text() }, 
    ); 
} 

function callback2(data2, obj, another_Param){ 
    obj.text(data2 + another_Param); 
}