jQuery异步问题,GET请求后变量赋值
jQuery Async Issue, Variable Assignment After GET Request
我确信解决方案就在我眼前,只是我看不见。我正试图从外部文件源加载对象。我已经尝试了几种使用jQuery内置方法的方法,但一直返回undefined
。是我的问题吗?我需要partnerData
正确的地方,因为在我的脚本中的其他依赖方法。我不想从$.get
回调中操作我网站的其他功能。非常感谢任何帮助,下面是代码:
$(function() {
var partnerData;
$.get('data/partners.json', function(file) {
partnerData = $.parseJSON(file);
});
console.log(partnerData); /* returns undefined instead of object */
});
编辑:感谢大家的反馈。这是我使用的解决方案:
var partnerData;
$.ajax({
url: 'data/partners.json',
dataType: 'json',
async: false,
success: function(data) {
partnerData = data;
}
});
您看到undefined
的原因是因为ajax请求在默认情况下是异步的。这意味着您的get
方法被调用,当请求在后台执行时,代码流向下移动到下一个语句。您的回调函数稍后在请求完成时被调用。
使用回调函数是在这种情况下使用的常见模式。但你好像在说你不想做或者不能做。在这种情况下,您可以使用async: false
来强制请求是同步的。但是,请记住,您的代码将在请求上被阻塞,如果它是一个长时间的请求,用户体验将随着浏览器锁定而降低。
注:您不需要parseJSON
-如果响应具有正确的mime类型设置,jQuery将智能地猜测类型并自动解析JSON。如果服务器没有返回正确的mime类型,你还可以显式地告诉jQuery期望返回的数据类型是什么;参见$.get()
的dataType
参数
修改代码的一种方法是强制同步请求:
$.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
});
函数被处理到结束事件时,ajax仍在处理中。插入回调函数
$(function() {
var partnerData;
$.get('data/partners.json', function(file) {
partnerData = $.parseJSON(file);
console.log(partnerData);
});
});
我想说你的问题和我刚才解决的问题是一样的,如果$。get是AJAX!它正在设置一个变量,要在回调之外读取该变量,您需要等待响应!所以你必须设置async=false!
console.log是同步的,get是异步的。
试题:
$(function() {
var partnerData;
$.get('data/partners.json', function(file) {
partnerData = $.parseJSON(file);
test();
});
function test(){
console.log(partnerData);
}
});
相关文章:
- Javascript变量赋值|
- 如何在javascript中为全局变量赋值
- 我可以在javascript中的回调函数中为变量赋值吗
- JavaScript 变量赋值的行为令人惊讶
- 为什么 Javascript 在变量赋值时将 null 转换为字符串
- JavaScript: 变量赋值 in for 语句 |在前面或里面
- 我可以将变量赋值为数组值吗?
- 变量赋值无效
- 一行中的多个变量赋值
- Javascript中的多变量赋值
- 如何根据 IF 句子和警报为变量赋值?.JS
- 无法为变量赋值 - Javascript
- 为所有以特定字符串开头的变量赋值
- Javascript中多变量赋值的正确方法
- 条件变量赋值的最佳方法
- 在 JavaScript 中是否有一个严格等价的 ||在变量赋值中使用时
- 在 JavaScript 中,未声明的变量赋值可以在函数范围之外访问
- 使用Javascript,变量赋值上下文中的表达式与上下文外的表达式有什么区别
- JavaScript 变量赋值
- 当我为 PHP 变量赋值时,是否可以调用 JavaScript 函数