将AJAX响应存储到变量中,以便稍后在脚本中使用
storing AJAX response into variable for use later in script?
下面是我代码的要点:https://gist.github.com/tconroy/e52e0e7402face8f048e
基本上,我的程序分为几个步骤:
- 从N个输入中检索用户输入(用户可以添加/删除)
- 对每个输入执行AJAX查询,检索JSON格式的天气数据。
- AJAX成功后,将数据传递给
dataReady()
函数。 -
dataReady()
函数将数据存储到全局Array[]
引起特别问题的部分:
function getWeatherData(){
// set up query strings.
var queryBase = "http://api.worldweatheronline.com/free/v1/weather.ashx?q=",
queryEnd = "&format=json&num_of_days=5&key="+weatherAPIKey;
// iterate through each address input
$('.inp').each(function(){
// setup query
var inp = this;
var addr = encodeURIComponent( inp.value );
var query = queryBase + addr + queryEnd;
// perform query
$.ajax({
url: query,
async: false,
dataType: 'jsonp',
success: function(json){
// format our response data into object, push it into container array.
var objName = String(decodeURIComponent(addr));
var objVals = json.data.weather;
dataReady(objName, objVals);
},
error: function(){
alert(errMsg);
}
});
}); // end $('.inp').each();
// setup the graph
setupGraph();
} // end getWeatherData();
function dataReady(objName, objVals) {
console.log('dataReady() called.');
responseValues[objName] = objVals;
}
据我所知(见注释),您正在处理异步调用的典型问题。您调用AJAX,然后调用setupGraph()
,但AJAX响应将在该调用之后到达,因为它是异步的。
首先,做async: false
是坏的,错误的,是万恶之源。永远不要用它。在您的情况下,它甚至不能工作,因为您不能强制JSONP同步。但即使你可以让我重复一遍,因为这很重要:永远不要使用async: false
。
var reqs = [];
$('.inp').each(function(){
// some code
reqs.push(
$.ajax({
// some settings
})
);
});
$.when.apply($, reqs).then(function() {
setupGraph();
});
在这里阅读更多关于$.when
的信息:https://api.jquery.com/jQuery.when/
相关文章:
- 真的没有办法在Firefox中自动杀死没有响应的脚本吗
- 如何获取从 AJAX 到脚本的发送响应
- 为什么我的附加组件面板的内容脚本在更改 contentURL 后不再响应端口消息
- 如果HTTP响应为404,脚本标记会被阻塞吗
- 将简单的Perl脚本翻译成Python,向客户端发送响应
- 如何在java脚本中从http响应生成blob
- 在Java(Coffee)脚本中获取响应值
- 当我使用java脚本调用web服务时,模拟器上没有得到响应
- 加速谷歌脚本中的onEdit功能-有时没有响应
- Java脚本将URL的响应读取到变量中
- 避免'脚本没有响应'使用反向AJAX/Comet
- F5负载平衡器附加<脚本>到JSON Ajax响应
- Javascript随机名称猜测者:无响应的脚本问题
- 避免“;无响应脚本"foreach循环中的消息
- jQuery ajax 调用 - jim 脚本响应应该是什么格式
- 如何删除响应式移动设备的脚本
- 如何从 jQuery ajax 响应中删除<脚本>标签
- jQuery 如何导致执行在 AJAX 响应中返回的脚本标记中找到的 JS 代码
- 如何使用 AJAX 获取 CGI 脚本响应
- ReactJS -在渲染前等待第三方脚本响应