![](/img/trans.png)
[英]Why am I getting the error: Uncaught TypeError: Cannot read property 'left' of undefined
[英]Why am i getting this error: “Uncaught TypeError: Cannot read property 'Title' of undefined”?
我正在嘗試編寫一個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請求中的data
:
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( data );
還沒有解雇,所以_doc
仍然是一個空對象,所以_doc.Title
是未定義的,並且嘗試在未定義的_doc.Title
上檢索Title
_doc.Title
錯誤。
與您的問題無關,但僅供參考,您可能需要查看jQuery.getJSON
方法; jQuery.get
方法之間的區別在於您傳遞的響應對象已經是JSON對象(因此您不需要調用jQuery.parseJSON
)。
你的$.get()
函數是異步的。 這意味着當你調用它時,你所做的就是開始執行ajax調用。 因此,它之后的行:
document.title = _doc.Title.Title;
在ajax調用完成之前執行。 您只知道ajax調用已完成其完成功能。
要解決此問題,請在_doc
中添加對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;
}
);
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.