javascript - jQuery未定义的ajax函数
问题描述
我从 jQuery 开始,我想检索并显示返回数组的自定义 ajax 函数的结果。但是我的控制台将我发回未定义:
不明确的
<head> 部分正确引用了 jQuery 库 CDN。我读了很多关于这个网站的讨论,但我无法解决这个问题。但是,我的印象是我的代码是正确的?
function query_suggest(query, lang){
var result;
$.ajax({
url: 'http://suggestqueries.google.com/complete/search',
data: {
"hl": lang,
"ds": "",
"q": query,
"client": "firefox"
},
jsonpCallback: 'msgsJsonCallback',
type: 'GET',
headers: {
"Accept-Language": lang,
"Accept": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"
},
dataType: 'jsonp',
success: function(data) {
result = data;
return result;
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR);
console.log(textStatus);
console.log(errorThrown);
},
cache: true
});
}
var suggest = query_suggest("chuck norris", "en");
console.log(suggest);
解决方案
如果你想围绕一个 ajax 调用创建一个函数包装器,你可以返回一个 Promise 并在 Promise 解决时对响应做任何你想做的事情:
function query_suggest(query, lang) {
return new Promise(
function (resolve, reject) {
$.ajax({
url: 'http://suggestqueries.google.com/complete/search',
data: {
"hl": lang,
"ds": "",
"q": query,
"client": "firefox"
},
jsonpCallback: 'msgsJsonCallback',
type: 'GET',
headers: {
"Accept-Language": lang,
"Accept": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"
},
dataType: 'jsonp',
success: resolve,
error: reject,
cache: true
});
})
}
var suggest = query_suggest("chuck norris", "en");
suggest.then(result => {
console.log(result) // on success
}).catch(function () {
console.log(this, arguments) // on error
})
推荐阅读
- javascript - How to get Data in the main array when filtering in the Sub Array
- asp.net-mvc - Why i have to use httpContextAccessor in Asp.Net to get user name and role?
- php - Symfony 4 HTTP 缓存标头在探查器和浏览器中不同
- c# - 如果满足条件,如何从一个单元格复制数据并将其放入另一个单元格
- flutter - 在 Flutter 中运行 pod install 时出现错误
- php - 如何在网站中添加多语言部分
- scala - Scala Parser Combinator:递归
- xamarin.forms - 如何保持 AppShell 选项卡保持加载状态?
- assembly - ldr内存加载指令可以从内存的堆栈部分中加载吗
- node.js - 尝试设置 firebase 自定义声明,但我不断收到错误消息