ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 为什么我收到此错误:“未捕获的TypeError:无法读取未定义的属性’标题’”?

2019-06-13 21:27:29  阅读:182  来源: 互联网

标签:jquery json javascript ajax


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

标签:jquery,json,javascript,ajax
来源: https://codeday.me/bug/20190613/1235276.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有