如何从AJAX请求传递两个回调函数相同的变量?
我对编码相当陌生,目前正在进行FCC上的Wikipedia查看器项目。我有两个回调函数依赖AJAX请求并使用相同的数据,一个用于在用户输入输入时提示搜索,另一个用于在输入时显示结果。如何从AJAX请求传递两个回调函数相同的变量?
对于建议:
function searchSuggest(data) {
$('.suggestions').empty();
var title = Array.from(data[1]);
var url = Array.from(data[3]);
var listLength = title.length;
for (var i = 0; i < listLength; i++) {
var listItem = `
<li>
<a href="${url[i]}" target="_blank">${title[i]}</a>
</li>
`;
$('.suggestions').append(listItem);
}
}
而对于结果:
function display(data) {
$('.results').empty();
$('.suggestions').empty();
var title = Array.from(data[1]);
var snippet = Array.from(data[2]);
var url = Array.from(data[3]);
var listLength = title.length;
for (var i = 0; i < listLength; i++) {
var result = `
<a href="${url[i]}" target="_blank">
<li>
<span>${title[i]}</span>
<p>${snippet[i]}</p>
</li>
</a>
`;
$('.results').append(result);
}
$('.results').addClass('show');
}
Ajax请求返回this
有没有一种方法来传递变量到两个功能,而无需重复自己?尝试创建一个对象变量来包含数组,但没有奏效。
Full code is on codepen here。
,你想,你可以通过一个变量/值对尽可能多的功能:
ajax(query, function(data) {
// maybe check keycode here?
display(data);
searchSuggest(data);
});
对不起,我的意思是这两个函数都使用从ajax数据创建的相同变量(标题,url,代码段),而且我现在必须在两个函数中声明它们。有没有办法在函数之外创建这些变量,然后在内部使用? –
我的意思是,你可以让'searchSuggest'接受'title'和'url'作为参数,同样你可以让'display'接受'title','url'和'snippet'作为参数,但我不认为这改善了一切。保留从函数内的数据中提取所需值的任务。即你看起来很好。 –
我觉得这样是你在想什么。 https://codepen.io/anon/pen/jLpLYL?editors=0010
var input = $('#input');
var response = null;
var dataGlobal = {};
function ajax(query) {//ajax now only takes one variable
var start = 2;
if (query.length >= start) {
if (response != null)
response.abort();
response = $.ajax({
url: 'https://cors-anywhere.herokuapp.com///en.wikipedia.org/w/api.php?action=opensearch&format=json&limit=8&suggest&search=' + query,
type: 'GET',
data: {},
dataType: 'json',
success: function(data) {
console.log(data);
dataGlobal = data;
searchSuggest(dataGlobal);
}
});
}
}
我已经创建了一个dataGlobal变量,只要求searchSuggest Ajax请求。
我将dataGlobal变量设置为ajax请求的结果,然后使用这些存储的结果调用显示。
希望这会有所帮助:)
欢迎来到堆栈溢出!请不要发布文字图片。我们无法在线读取它们。 – catbadger