2014-04-01 19 views
0

我知道那裏有很多AJAX問題,但通讀後他們無法弄清楚如何做到這一點(我是JS的新手)在AJAX調用後將參數傳遞給promise.done()

除了通過ajax調用返回的「數據變量」(您可以通過.done(function(data){});訪問...不確定是什麼類型)之外,將$ form變量(或其他變量)傳遞給ajaxFormSubmitSuccess函數它的對象)。

我有(這不起作用):

//handles ajax form submissions 
$("form[data-ccajax='true']").submit(ajaxFormSubmit); 

var ajaxFormSubmit = function() { 

var $form = $(this); 
var options = { 
    url: $form.attr("action"), 
    type: $form.attr("method"), 
    context: this, 
    data: $form.serialize(), 
    dataType: "html" 
}; 

//send ajax command 
var promise = $.ajax(options); 
promise.done(ajaxFormSubmitSuccess($form, promise)); 
promise.fail(ajaxFormSubmitFailure); 
return false; 

} 

眼下.done(ajaxFormSubmitSuccess($form, promise));代碼調用下面的函數。 data變量未從promise中提取...因此$data在整個代碼中保持爲空。

var ajaxFormSubmitSuccess = function ($form, $promise) { 

var $data; 
$promise.success(function (data) { $data = data; }); 

alert("succeededajaxFormSubmit"); 

var target1 = $("#"+$form.attr('data-cctarget1')); 
target1.html($data); 

} 

如何做到這一點的權利任何幫助,非常感謝!

回答

0

$promise裏面的ajaxFormSubmitSuccess不是ajax調用的結果,而是一個承諾。它是異步的,所以這就是爲什麼你的變量$data$promise.success()之後仍然是空的。

試試這個方法:

var ajaxFormSubmitSuccess = function ($form, $promise) 
{ 
    $promise.success(function (data) 
    { 
     alert("succeededajaxFormSubmit"); 

     var target1 = $("#"+$form.attr('data-cctarget1')); 
     target1.html(data); 
    }); 
} 

更多的見解:https://api.jquery.com/promise/

+0

謝謝你 - 這似乎工作 - 我曾以爲ajaxFormSubmitSuccess只會被調用(即使JS是異步)請求是後「完成」和「數據」已填充...不會猜測。 – ASX