.each 循环只返回最后一个结果

.each loop only returning last result

我的 .each of alphabet 只返回 "s" 的最后一个结果:

$('#keywordTable tr:last').after('<tr><td>' + s + '</td><td>' + val[0] + '</td><td>0</td><td>0</td><td>0</td></tr>');

相关javascript代码:

var suggestCallBack; // global var for autocomplete jsonp
  var keywordCount = 0;
  var alphabet = "abcdefghijklmnopqrstuvwxyz0123456789".split("");
  $('body').on("click", '#submit', function() {
      $('#keywords').html('');
      var search_input = $("#keyword").val();
      var language = $("#edit-domain").val();
      callAPI(search_input, language);
      _.each(alphabet, function(letter) {
          callAPI(search_input + ' ' + letter);
          callAPI(letter + ' ' + search_input);
      });
      return false;
  });
function callAPI(s, language){

      $.getJSON("http://suggestqueries.google.com/complete/search?callback=?", {
        "hl": language, // Language
        //"ds":"yt", // Restrict lookup to youtube
        "jsonp": "suggestCallBack", // jsonp callback function name
        "q": s, // query term
        "client": "youtube" // force youtube style response, i.e. jsonp
    });
    suggestCallBack = function(data) {
        var suggestions = [];
        var languageText = $("#edit-domain option:selected").text();
        $('#keywordTable').show();
        $.each(data[1], function(key, val) {
            suggestions.push({
                "value": val[0],
            });
            $('#keywordTable tr:last').after('<tr><td>' + s + '</td><td>' + val[0] + '</td><td>0</td><td>0</td><td>0</td></tr>');
            $('#keywordCount').text(++keywordCount);
            $('#keywordtext').text(s);
            $('#languageholder').text(languageText);
        });
    }

    }

这里是实时预览:http://keyworda.com

问题:(红圈):http://i.imgur.com/gR46SuE.png

您 运行 遇到了多个并发 JSONP 请求的问题。您的每个回调函数名称必须不同,否则它们会相互覆盖,您将只能看到最后一个请求的结果。您可以阅读更多相关信息 here or here

要修复您的 $.getJSON 调用,您应该删除 jsonp: 'suggestCallback' 位并将回调函数作为第二个参数。回调名称由 jQuery 自动填充,因为您将 callback=? 放在 URL.

$.getJSON("http://suggestqueries.google.com/complete/search?callback=?", {
    "hl": language, // Language
    "q": s, // query term
    "client": "youtube" // force youtube style response, i.e. jsonp
}, function(data){
    var suggestions = [];
    var languageText = $("#edit-domain option:selected").text();
    $('#keywordTable').show();
    $.each(data[1], function(key, val) {
        suggestions.push({
            "value": val[0],
        });
        $('#keywordTable tr:last').after('<tr><td>' + s + '</td><td>' + val[0] + '</td><td>0</td><td>0</td><td>0</td></tr>');
    });
});

这是一些工作代码:http://plnkr.co/edit/O2JKhhOziRczIMkctQc7?p=preview