从get ajax调用中获取变量
Getting variable out of a get ajax call
这个问题实际上是由于我没有完全理解jquery。
我有一些代码,我试图把一个函数使用多次。
function actors(query){
$.get("websit.com?title=" + query + "&type=json", function(html){
var result = html;
var obj = eval ("(" + result + ")");
var actor = obj[0].actors;
return actor; //as far as im aware this does nothing
});
return 0; // gets here and returns zero, returning actor here returns undefined
}
演员变量保存了我需要的信息,但是我正在努力将变量从函数中取出。由于内部函数的作用它会穿过并到达return 0;
如果我尝试给内部函数赋值一个变量,它将返回一个对象,而不是返回变量。
这个问题每月被问到1000次。您不能使异步调用像同步调用一样工作。这就是回调的作用。
你也在使用jQuery,没有必要使用eval!设置正确的内容类型,它将为您解析数据。
回调的基本思想
function actors(query, callback){
$.getJSON("websit.com?title=" + query + "&type=json", function(data) {
var actor = data[0].actors;
callback(actor);
});
}
function processResults(info){
console.log(info);
}
actors("Something", processResults);
虽然您确实不能那样做,但我发现在我遇到的大多数情况下,这样做是可以接受的解决方法:
function getMeSomeJSON(query) {
return $.get("websit.com?title=" + query + "&type=json");
}
将请求的响应返回给调用它的对象。
也可以:
- 传递回调的响应。
- 使用美元。但是,这被认为是不好的做法。
阅读文档。它有一些示例,包括数据类型处理。一个简单的检查应该有助于确定返回什么。
正如您自己注意到的,ajax响应处理程序在 actor函数返回后执行,因此很难返回值。标准的解决方案是从actor函数返回一个承诺。你可以在jquery文档中阅读有关承诺或延迟对象的内容。
这是我的建议:
function actors(query){
var actorsPromise = $.Deferred();
$.get("websit.com?title=" + query + "&type=json", function(html){
var result = html;
var obj = eval ("(" + result + ")");
var actor = obj[0].actors;
actorsPromise.resolve(actor);
});
return actorsPromise;
}
actors(/* your query */).done(function(actor) {
//do whatever you need with your actor
});
相关文章:
- Javascript:无法获取变量中的单选按钮值
- 活动选项卡's源代码-获取变量s值
- 使用nodejs从url中获取变量
- Handlebars帮助程序未获取变量的值
- 通过Ajax获取变量
- for 循环和 if 语句,获取变量并存储它
- 从javascript表达式(Rhino)中获取变量
- 如何从 Chrome 扩展程序中的内容脚本中获取变量
- 从对象实例中获取变量名称
- 如何通过 .get() 从文件中获取变量
- 使用chrome.storage.get获取变量
- Rails/JS-在不刷新页面的情况下获取变量
- Jquery:如何获取变量的局部外部函数
- 从外部js文件获取变量
- 如何获取变量's设置元素时的文字值's onclick处理程序
- 从查询字符串中获取变量,将其与Javascript中的数组匹配
- 如何在另一个php文件中从ajax获取变量
- 通过Ajaxrequest.open从Javascript获取变量到PHP文件
- Jade:在Bootstrap Modal中获取变量
- 使用Chrome扩展从以前的选项卡中获取变量