1

我创建了一个名为save的函数,当我调用save函数时,我得到了 undefined 或 object Object 的成功

更新:更新以获取 ajax 返回的 jqxhr 对象的值

function save() {
 return   $.ajax({
        type: "POST",
        url: "foo.json",
        data: json_data,
        contentType: 'application/json',
        success: function (data, textStatus, xhr) {

            $('<div id="loading">Loading...</div>').insertBefore('#form');

        },

        error: function (jqXHR, textStatus, errorThrown) {


        }
    });


}


$(document).ready(function () {

$(function () {
 $("#save").click(function () {
     var jqxhr = save();
     alert("success " + jqxhr.success);
     alert("status " + jqxhr.status);
     alert("status " + jqxhr.readyState);
 });
});


 });
4

3 回答 3

5

第十次。

ajax 是异步的。

使用回调函数。

于 2012-12-03T17:01:07.750 回答
1

Ninja 由 OP 编辑
​​ 首先,return您的函数中没有语句save,因此它通过返回undefined值按预期工作。

其次,它不会那样工作。您需要返回$.ajax调用(它本身返回一个jqXHR object,您可以在其中挂钩并设置不同事件的代码。毕竟,默认情况下,Ajax 请求运行asyncronously

在保存()

return $.ajax({ ...

然后...

save().done(function( retValue ) {
    alert('success ' + retValue);
});

在此处此处了解有关jQuerys AjaxDeferred 对象 的更多信息。

于 2012-12-03T17:02:34.313 回答
0

可能这是导致问题的原因,因为我看到您有 2 个文档就绪处理程序一个接一个。

/***/
 $(function () { // <--------------------I think this doesn't has to be here, 
                 //                      so remove it and try if this solves 
                 //                      the issue
     $("#save").click(function () {

         var success = save();
         alert("success " + success);

     });
 }); // <-------------------------------and this one too
于 2012-12-03T17:14:44.420 回答