我正在尝试编写一个ajax 网络应用程序。我有一个函数,假设请求一个 json 对象,然后用它来重新/填充网站。
这是问题(第 8 - 16 行) 中的 Javascript:
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"
并将标题更改为主页
这里证明它不是未定义的:
_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请求(Asynchronous JavaScript and XML)请求是异步的;浏览器发起请求,不等待响应...而是继续执行 JavaScript。 一段时间后,当 AJAX 请求的 HTTP 请求完成时,您为 AJAX 请求提供的回调将被调用,并且可以访问 HTTP 响应中包含的数据。
在您的情况下,document.title = _doc.Title.Title;
在 AJAX 请求发送后立即执行(即在一段时间后 上面提到的已经发生);所以回调 _doc = jQuery.parseJSON( data );
还没有触发,所以 _doc
仍然是一个空对象,所以 _doc.Title
未定义,尝试在未定义的 _doc.Title
上检索 Title
会引发错误。
与您的问题无关,但仅供引用,您可能需要查看 jQuery.getJSON
方法; jQuery.get
方法的区别在于,您传递的响应对象已经 是 JSON 对象(因此您不需要调用 jQuery.parseJSON
).
关于javascript - 为什么我收到此错误 : "Uncaught TypeError: Cannot read property ' Title' of undefined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8113985/