我正在尝试编写一个ajax Web应用程序.我有一个函数,假设请求一个json对象,然后使用它来重新/填充网站.
这是问题中的Javascript(第8 – 16行):
window.onload=LoadData("Home", {});
var _doc = {};
function LoadData(page, params) {
$.get(page, params, function ( data ) {
_doc = jQuery.parseJSON( data );
}
);
document.title = _doc.Title.Title;
};
这是Chrome给出的错误:
Uncaught TypeError: Cannot read property 'Title' of undefined
LoadDatahttp://127.0.0.1/:15
(anonymous function)
如果我在控制台中运行相同的语句,这让我感到困惑:
document.title = _doc.Title.Title;
"Home"
它将标题更改为Home
这是证明其未定义:
_doc
Object
Body: Object
Menus: Array[4]
0: Object
Menu: Object
1: Object
Menu: Object
2: Object
Menu: Object
3: Object
Menu: Object
Title: Object
Title: "Home"
User: Object
Name: "Username"
并截图作为概述:
解决方法:
您只能在回调中访问AJAX请求中的数据:
window.onload=LoadData("Home", {});
var _doc = {};
function LoadData(page, params) {
$.get(page, params, function ( data ) {
_doc = jQuery.parseJSON( data );
document.title = _doc.Title.Title;
}
));
};
AJAX请求(异步JavaScript和XML)请求是异步的;浏览器启动请求,而不是等待响应…而是继续执行JavaScript.一段时间后,当AJAX请求的HTTP请求完成时,将调用您为AJAX请求提供的回调,并且可以访问HTTP响应中包含的数据.
在你的情况下,document.title = _doc.Title.Title;在调度AJAX请求之后立即执行(即在上面提到的一段时间之后发生);所以回调_doc = jQuery.parseJSON(数据);还没有解雇,所以_doc仍然是一个空对象,所以_doc.Title是未定义的,并且尝试在未定义的_doc.Title上检索标题会引发错误.
与您的问题无关,但仅供参考,您可能需要查看jQuery.getJSON
方法; jQuery.get方法之间的区别在于您传递的响应对象已经是JSON对象(因此您不需要调用jQuery.parseJSON).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。