1

saveという関数を作成しました。save関数を呼び出すと、未定義またはオブジェクトオブジェクトが成功します。

更新: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

OPの忍者編集
まず、関数return内にステートメントがないsaveため、値を返すことで期待どおりに動作しundefinedます。

第二に、それはそのようには機能しません。呼び出しを返す必要があり$.ajaxます (それ自体が を返しますjqXHR object。ここで、さまざまなイベントのコードをフックしてセットアップできます。結局、デフォルトでは、Ajax リクエスト非同期で実行されます。

セーブ()で

return $.ajax({ ...

以降...

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

jQuerys AjaxDeferred オブジェクト の詳細については、こちらこちらをご覧ください。

于 2012-12-03T17:02:34.313 に答える
0

これが問題の原因である可能性があります.2つのドキュメント対応ハンドラーが1つずつあることがわかります。

/***/
 $(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 に答える