0

ajaxから呼び出し元関数にデータを返すことに問題があります。console.loggingを実行しているときは、未定義です。

私の問題は、jsが非同期であるという事実が原因で発生していると思います。また、console.logでデータをログアウトしているときは、まだ準備ができていません。それを解決するために私は何ができますか?

FooFunction: function(userInput){

    var fooData = FooFunction2(userInput);
    console.log(fooData);     // <--- undefined
},

FooFunction2: function(userInput) {

    $.ajax({
         url:'./php/test.php',
         type:'post',
         dataType:'json',
         data:{ 
             fooData: userInput
         },
         success:function(data) {
             ...manipulating the data...

             console.log(manipulatedData);    // <--- ['foo', 'foo2'];
             return manipulatedData;
         }
    });
},
4

2 に答える 2

2

ajax呼び出しは非同期であるため、戻りは機能しません。ajax呼び出しが完了したときに呼び出されるコールバックを使用するようにコードを変更します。

私はあなたのコードをそれをするように変更しました:

FooFunction: function(userInput){
    var callbackfunc = function(ajaxData)
    {
        console.log(ajaxData); //ajax is complete!
    };

    this.FooFunction2(userInput, callbackfunc);
},

FooFunction2: function(userInput, callbackfunc) {

    $.ajax({
         url:'./php/test.php',
         type:'post',
         dataType:'json',
         data:{ 
             fooData: userInput
         },
         success:function(data) {
             ...manipulating the data...

             console.log(manipulatedData);    // <--- ['foo', 'foo2'];
             callbackfunc(manipulatedData);
         }
    });
},
于 2012-12-29T14:40:29.843 に答える
1

FooFunction2オブジェクト使用のプロパティですthis.FooFunction2

非同期メソッドから戻ることはできません。ajax呼び出し同期またはproivdeコールバックを行います。

FooFunction: function(userInput){

    var fooData = this.FooFunction2(userInput);
    console.log(fooData);     // <--- undefined
},

変更されたコード

FooFunction: function(userInput){

     this.FooFunction2(userInput, function(fooData){
          console.log(fooData);     // <--- undefined
    });

},

FooFunction2: function(userInput, cb) {

    $.ajax({
         url:'./php/test.php',
         type:'post',
         dataType:'json',
         data:{ 
             fooData: userInput
         },
         success:function(data) {
             ...manipulating the data...

             console.log(manipulatedData);    // <--- ['foo', 'foo2'];
             cb(manipulatedData);
         }
    });
},
于 2012-12-29T14:36:38.793 に答える