JSON节点返回'未定义'从ajax请求插入后
JSON node returns 'undefined' after insert from ajax request
我有一个jQuery插件,它通过ajax调用加载json数据——返回的数据插入到现有对象中。
当我尝试引用新插入的节点时,我会得到一个"未定义"——尽管数据在控制台中看起来不错。
如果我手动定义数据,那么我可以很好地访问它——即使结构是相同的。
数据加载在init事件上(.then()中会有多个函数调用,但我只是显示失败的初始调用-每个调用都将引用相同的_t.creditions.base.x,其中x是插入的json):
var _t = this;
_t.init = function() {
_s = $.extend({}, defaults, options);
$.when(
loadDefaultCriteria()
).then(
renderCommunities
);
}
这会加载数据:
_t.criteria = {
base: {},
current: {},
picks:{}
};
var loadDefaultCriteria = function() {
$.getJSON
(
'/path/to/script.php',
{
action: 'loadDefaultCriteria',
})
.done( function( data ){
_t.criteria.base = data;
})
.fail( function( jqxhr, textStatus, error ) {
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );
});
}
这是失败的代码(调试日志仍然存在)
var renderCommunities = function(){
console.log(_t.criteria);
var c = $(_s.containers.communities);
var i = _t.criteria.base.communities;
console.log(i);
c.empty();
c.append('<ul>');
$.each( i, function( idx, _i ) {
console.log(_i);
});
}
console.log(_t.scriteria)输出如下(我只显示基本对象的扩展树):
Object {base: Object, current: Object, picks: Object}
base: Object
communities: Object
subscribed: Array[2]
0: Object
1: Object
unsubscribed: Array[1]
0: Object
current: Object
picks: Object
无论我尝试在base下面引用哪个对象,它们都会返回"undefined",所以在console.log(_t.base.communities)上面的代码中,它们都将返回undefined。
如何将JSON数据/节点的子集插入到现有对象中,然后访问它们?
$.when
需要一个Deferred对象作为其参数。现在,loadDefaultCriteria
没有返回任何内容,所以$.when
将undefined
作为其参数。相反,loadDefaultCriteria
必须return
由$.getJSON(...)
调用创建的Deferred对象:
var loadDefaultCriteria = function() {
return $.getJSON( ... );
}
您的renderCommunities
呼叫发生在getJSON
呼叫完成之前。console.log
调用显示更新对象的原因是,您在$.getJSON
调用强制执行后检查了记录的对象,而console.log
始终显示检查时存在的对象。事件顺序为:
- 在
loadDefaultCriteria
中发起getJSON
调用 - 在对象更新之前立即运行
renderCommunities
- 在控制台输出中显示未展开的对象
$.getJSON
解析并更新对象- 几秒钟后,展开控制台输出中的对象,查看当前存在的对象
相关文章:
- 将样式表插入iframe
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- ajax请求的顺序总是不同的
- Meteor如何接收HTTP请求
- 有没有一种方法可以防止img get请求使用css或js发生
- 从ajax请求中获取javascript对象
- 如何动态插入jquery代码
- JSONP请求返回结果,但也触发error_callback
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 在post请求中使用mongodb插入多个文档
- json - 从响应对象中获取值,并将其插入请求中
- 如何接受用户输入并插入到 http get 请求中
- 如何插入在后台运行的慢速 ajax 请求
- Google 购物 API 节点.js产品插入返回“插入请求必须指定产品”错误
- JSON节点返回'未定义'从ajax请求插入后
- 分析查询错误-400:插入数据时请求错误
- 如何检查jQueryAJAX请求的成功结果,并在插入内容之前中止jQuery.load()
- 在Angular中不能在http get请求中插入字符串
- 多个jQuery Ajax请求和插入数据库
- 拦截插入额外变量的Jquery AJAX请求