65F*_*f05 2 javascript ajax jquery json get
我确定解决方案是正确地盯着我,但我看不到它.我正在尝试从外部文件源加载对象.我已经尝试了几种方法,使用jQuery的内置方法,但继续返回undefined.我的问题是范围吗?partnerData由于脚本中的其他依赖方法,我需要它在正确的位置.我不想在$.get回调中操作我网站的其余功能.非常感谢任何帮助,这里是代码:
$(function() {
var partnerData;
$.get('data/partners.json', function(file) {
partnerData = $.parseJSON(file);
});
console.log(partnerData); /* returns undefined instead of object */
});
Run Code Online (Sandbox Code Playgroud)
编辑:
感谢所有人的反馈.这是我采用的解决方案:
var partnerData;
$.ajax({
url: 'data/partners.json',
dataType: 'json',
async: false,
success: function(data) {
partnerData = data;
}
});
Run Code Online (Sandbox Code Playgroud)
您之所以看到原因,undefined是因为默认情况下ajax请求是异步的.这意味着get当请求在后台执行时,会调用您的方法并将代码流向下移动到下一个语句.稍后在请求完成时调用您的回调函数.
使用回调函数是在这种情况下使用的常见模式.但你似乎在说你不想或不能这样做.在这种情况下,您可以使用async: false哪个会强制请求同步.但请记住,您的代码将在请求中被阻止,如果这是一个长期存在的请求,则用户体验会因浏览器锁定而降低.
PS你不应该parseJSON- 如果响应具有正确的mime类型集,jQuery将智能地猜测类型并自动解析JSON.如果服务器没有发回正确的mime类型,你也可以明确告诉jQuery预期的返回数据类型是什么; 看到dataType参数$.get().
修改代码的一种方法是强制同步请求:
$.ajax({
type: 'GET',
url: 'data/partners.json',
success: function(file){
partnerData = $.parseJSON(file);
//ideally you would perform a callback here
//and keep your requests asynchronous
},
dataType: 'json',
async: false
});
Run Code Online (Sandbox Code Playgroud)