0

私は自分のテーブルのすべての行を繰り返し処理しようとしており、本と著者の値を使用して、API 呼び出しを行い、詳細を取得して文字列を入力します。ここでの問題は、送信を押したときに str_tot が空であることです。なぜこれが起こったのかを理解するためにアラートステートメントを追加したとき、.each 関数は一度にテーブルからすべての値を取得し、最後の値だけで API 呼び出しループに入るようです。

API 呼び出しが呼び出しを行い、情報を取得するには、1 秒の遅延があります。これは少し奇妙で、問題を特定しようとして私の選択肢を使い果たしました。どんな助けでも大歓迎です。

<table id="list">
<thead>
 <th>Author</th>
 <th>Book</th>
</thead>
<tbody>
<tr>
<td class="check"><input type="checkbox" checked></td>
<td class="author">Name1</td>
<td class="book">Book1</td>
</tr>
...
...
...
<tr>
<td class="author">Name10</td>
<td class="book">Book10</td>
</tr>
</table>

<script>
var str_tot = " ";
$('#submit').click(function () {
$('#list > tbody > tr').each(function () { 

             var author = $(this).find('td.author').val();
             var book = $(this).find('td.book').val();

             if($(this).find('td.check').find("input").is(':checked')) {

                 var url = "http://api.book.com/some/link/search?query="+author+"&title[]=booktitle:"+book;
                 $.getJSON(url, function(data) {
                    var book = data.result[0]["book"];
                    var author = data.result[0]["author"];
                 });
                str_tot = str_tot + " " + author + " " + book; 
           });
});
</script>
4

1 に答える 1

0

AJAX はサービスを非同期で呼び出したので、$.getJSONメソッドを呼び出した後、すぐに次の命令に進みます。

str_tot = str_tot + " " + author + " " + book;

したがって、上記のステートメントをコールバック関数内に移動します。

$.getJSON(url, function(data) {
     var book = data.result[0]["book"];
     var author = data.result[0]["author"];

      str_tot = str_tot + " " + author + " " + book; 
});
于 2013-02-21T05:17:50.133 に答える