.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
我的 .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