迭代表上的每一行并进行api调用

时间:2013-02-21 05:07:15

标签: jquery json api

我正在尝试遍历表中的每一行并使用book和author值,我进行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>

1 个答案:

答案 0 :(得分: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; 
});