在AJAX调用之后将参数传递给promise.done()

时间:2014-04-01 08:07:23

标签: ajax

我知道有很多AJAX问题,但在阅读完之后无法弄清楚如何做到这一点(我是JS的新手)

将$ form变量(或其他变量)传递给ajaxFormSubmitSuccess函数,以及ajax调用返回的“数据变量”(您可以通过.done(function(data){});访问...不是真的确定它是什么类型的对象。)

我有(这不起作用):

//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);

}

非常感谢任何有关如何做到这一点的帮助!

1 个答案:

答案 0 :(得分: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/