2017-02-08 7 views
0

いくつかのajax呼び出しを使用する際にエラーが発生しました。これを配列に入れて、すべて終了したらキャプチャが必要です。 私のコードはこれです:エラー配列Ajaxが "when"を使用することを約束します

var userId=[1,2,3]; 
var ajaxR = []; 
for (var us in userId) { 
    var usId = userId[us]; 
    ajaxR.push($.ajax({ 
     type: "GET", 
     async: true, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     url: "myurl", 
     data: { id: usId } 
    })); 
} 
$.when.apply($, ajaxR).always(function (e) { 
    //Here I have the error but arguments it's ok 
    var objects = arguments;  
}); 

私はこのコードをdebbugとき、私は$ .whenにエラーが発生している機能:

Uncaught TypeError: Cannot read property '0' of undefined 

更新:

私の完全な機能は、それは次のとおりです。

function UserFromWS(userId) { 
     var users = []; 
     var ajaxR = []; 
     for (var us in userId) { 
      var usId = userId[us]; 
      ajaxR.push($.ajax({ 
       type: "GET", 
       async: true, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       url: "url", 
       data: { id: usId } 
      })); 
     } 
     $.when.apply($, ajaxR).always(function (e) { 
      var obj = arguments; 
      return obj; 
     }); 
     // return users; 
    } 

0123を入力するとエラーが消えます。関数の最後にはがあります。しかし、それは返すobjの前に空のユーザー配列を返すことを終わらせます。私は、このように関数を呼び出す必要があります。

var allUsers = UserFromWS ([1,2,3]); 

機能が$.when約束でobj返す必要があります。

+0

を見たときに、 'はconsole.log(引数)が'あなたに何を与えないことを知っていますか? – mehulmpt

+4

'var userId = [1,2,3;]'これは無効です。 –

+0

'in'を使って配列をループすることはできません.ES5では' of'を使ってループすることができます。 –

答えて

0

「userId」が配列として渡されていることが確認されます。ループを正しくループするようにforループを修正する必要があります(Why is using "for...in" with array iteration a bad idea?)。

function UserFromWS(userId) { 
     var users = []; 
     var ajaxR = []; 
     for (var i = 0; i< userId.length; i++) { 
      var usId = userId[i]; 
      ajaxR.push($.ajax({ 
       type: "GET", 
       async: true, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       url: "url", 
       data: { id: usId } 
      })); 
     } 
     return $.when.apply($, ajaxR).done(function (e) { 
      var obj = arguments; 
      return obj; 
     }); 
     // return users; 
    } 

はまた、あなたがこの関数の結果を待つ必要があります:

はまた、関数は約束を返す必要

var users = [10]; 

UserFromWS(users).then(function(result) { /* do stuff now */ }); 
アレイにAJAX呼び出しを保存しないのはなぜ
+0

ありがとう、私はループで良いsuggerenceを教えて:私はそれを適用するが、これは問題を解決しないで、単にパフォーマンスを向上させます。変数userIdの大丈夫、私はちょうど値でテストしています。 'var user = [10]; '関数を呼び出します。var userInfo = UserFromWS(user);しかし、私は誤りがあります。 – Javysk

+0

あなたはconsole.log(userId)できますか?最初の行で何が渡されているかを確認しますか?また、問題の原因となっているコードの行を特定できますか? (console.log( "something")を使用してエラーが発生する前にロギングが停止したときに見つけてください) –

+0

は私のawnserを更新しました。あなたはUserFromWSの結果を待っているようです。 –

-1

、 JQueryは自分でリクエストを再現することができ、同じ$ .ajax()を何度もエラーなく呼び出すことができます。

例:

 $.ajax({ 
      type: "GET", 
      async: true, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      url: "url", 
      data: { id: usId } 
     }).done(function (e) { 
     var obj = arguments; 
     return obj; 
    }); 

それとも、あなたのシステムを継続したい場合は、使用の約束 がhttps://api.jquery.com/jquery.when/

+0

あなたの答えはZakariaに感謝しますが、私は複数のユーザーからのユーザー情報を取得する必要があります。たくさんの非同期関数が$ですべての値を返します。 – Javysk

関連する問題