javascript - 为什么我收到此错误 : "Uncaught TypeError: Cannot read property ' Title' of undefined"?

标签 javascript jquery ajax json

我正在尝试编写一个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"

还有一个截图作为概览: This is What the Chrome Console Looks Like... 注意:调用底部的函数确实改变了标题

最佳答案

您只能从回调中的 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/

相关文章:

jquery - 使用 jQuery $.ajax 和 Last.FM API 创建/访问 JSON 对象

html - WordPress加载更多帖子而ajax不起作用

javascript - 使一个间隔开始另一个间隔

javascript - Vanilla Javascript 在窗口调整大小时操作元素

javascript - 使用对象文字表示法创建对象的有效 Javascript 语法是什么?

javascript - Kendo UI 中 ListView 的日期过滤器

javascript - 更改 Accordion 中父项的颜色

javascript - js - 以像素为单位获取客户端的窗口尺寸(显示器分辨率)

JQuery After Body ASP .NET MVC 4

javascript - asp.net ajax - 导致验证 onBlur 事件