【问题标题】:JQuery and Ajax: Cannot read property 'length' of undefinedJQuery 和 Ajax:无法读取未定义的属性“长度”
【发布时间】:2013-01-07 16:26:05
【问题描述】:

我正在尝试通过使用 URL 和 AJAX 中的变量来显示 JSON 来从网站获取特定请求。似乎一切正常,但出现错误“TypeError:无法读取未定义的属性'长度'”。调试器指向 JQuery 文件和我的脚本中的行 ($.ajax.success)。

function getQueryVariable(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i = 0; i < vars.length; i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  }
  alert('Query Variable ' + variable + ' not found');
}

$(document).ready(function () {

  var output = $('#news');
  var postid = getQueryVariable('id');

  $.ajax({
    url: 'http://www.domain.pro/api/get_post/?post_id=' + postid + '&post_type=news',
    async: false,
    callback: 'callback',
    crossDomain: true,
    contentType: 'application/json; charset=utf-8',
    type: 'POST',
    dataType: 'jsonp',
    timeout: 5000,
    success: function (data, status) {
       $.each(data.posts, function (i, item) {
        var news = '<div>' + item.title + '</div><div>' + item.content + '</div><hr/>';

        output.append(news);


      });
    },
    error: function () {
      output.text('There was an error loading the data.');
    }
  });
})

你能帮我解决这个问题吗?非常感谢您的支持。

【问题讨论】:

  • 突出显示哪一行?
  • 确认data 是您所期望的。
  • 另外,jsonp + POST 没有多大意义。你不能使用&lt;script src="http://www.cityfacts.pro/api/get_post/?post_id=12341234&amp;post_type=news"&gt;&lt;/script&gt; POST,这是 jQuery 在内部为 jsonp 请求所做的。
  • 拆分前查询变量中有什么?
  • 在您的each 函数中,您正在重新声明新闻变量。删除 var 并添加 +。应该是news+=

标签: jquery ajax


【解决方案1】:

您应该在对其执行操作之前验证您的数据:

更新

 $.ajax({
            url: 'http://www.domain.pro/api/get_post/?post_id=' + postid + '&post_type=news',
            async: false,
            callback: 'callback',
            crossDomain: true,
            contentType: 'application/json; charset=utf-8',
            type: 'POST',
            dataType: 'jsonp',
            timeout: 5000,
            success: function (data, status) {
               if(data != undefined && data.post != undefined){
                 $('#news').append('<div>' + data.post.title + '</div><div>' + data.post.content + '</div><hr/>');
                }
            },
            error: function () {
              output.html('<h1 class="error">There was an error loading the data.</h2>');
            }
          });

【讨论】:

  • 嗨,TNCodeMonkey,我已经验证了数据...但问题是一样的...不知道该怎么做老实说...
  • @qqruza 我会尝试换掉 $.each 并做一个 for 循环。首先将您的操作剥离到最基本的必需品,然后再进行备份,直到出现错误。
  • TNCodeMonkey,如果您能帮我修改代码,我将非常感谢您的帮助。我很抱歉问刚开始使用 JQuery...谢谢。
  • 谢谢 TNCCodeMonkey,但我遇到了另一个错误:Uncaught SyntaxError: Unexpected identifier。指向“错误:函数(){”
  • TNCodeMonkey 谢谢。现在它说语义问题:意外的令牌',' - 指代码的第 17 行
【解决方案2】:

您在 data.post 上应用 $.each,如果您的数据为空,则可能未定义。 $.each 期望数组或集合,这就是您收到长度错误的原因。由于您的数据为空,因此 data.post 将未定义。你可以在应用 $.each 之前检查一下

if(typeof data == "object" && data.post)
    //Your code here.

只要您期望来自 ajax 的某些数据,就应该应用此检查。

【讨论】:

  • 嗨,Rahul,我已经完成了检查,但不幸的是它没有帮助。您还有其他建议吗?
  • 你能告诉我你期待什么类型的数据吗?
  • 嗨 Rahul,如果您能帮我修改代码,我将非常感谢您的帮助。
猜你喜欢
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
相关资源
最近更新 更多