javascript - json/ajax 新手 .. 控制台错误是 Uncaught TypeError : Cannot read property 'length' of undefined

标签 javascript html ajax json

我的代码有问题。请注意,我对此完全陌生,所以如果解决方案很简单,请原谅我。在发布此内容之前,我确实尝试找到解决方案,并且发现了很多带有类似控制台错误的帖子,但是没有一个与我的问题相关(或者我只是不太理解它)。

我已经发布了我正在做的工作的 JSFiddle 版本,然后我在 GitHub 中发布了另一个版本,该版本抛出错误。除了它指向外部文档的位置之外,功能是相同的。然而,在我的 Github 完整版本上,我收到错误“Uncaught TypeError:无法读取未定义的属性‘长度’”。阅读其他人的问题,似乎对象没有正确转换,但如果是这样的话,我不知道为什么它在 JSFiddle 中工作。

这是js代码的片段。

$(document).ready(function() {

        $( "#sortable1, #sortable2, #sortable3" ).sortable({
      connectWith: ".connectedSortable"
    }).disableSelection();


    //Some code
    $("#sortable3").sortable();
    //Some more code
    $("#addStuff").click(function(e) {
        e.preventDefault();
        var itemSelector = $("#myList li"),
            items = [],
            dataObj = {};
        $.each(itemSelector, function(i, v) {
            items.push($(v).val());
        });
        //I Am Sure There Is A Better Way Of Sending Checked Items Than A Ton Of IF Statements, However This Works..
        if(document.getElementById('bacon').checked) {
            items.push($("#bacon").val());
        }        
        if(document.getElementById('bananapeppers').checked) {
            items.push($("#bananapeppers").val());
        }          
        if(document.getElementById('blackolives').checked) {
            items.push($("#blackolives").val());
        }        
        if(document.getElementById('greenpeppers').checked) {
            items.push($("#greenpeppers").val());
        }         

        dataObj.stuff = items;
        $.ajax({
            url: '/echo/json/',
            data: {
                json: JSON.stringify(dataObj)
            },
            success: function(data) {
                $("#sortable3").empty();
                $.each(data.stuff, function(k, v) {


     $("#sortable3").append("<li>" + v + "</li>");
            })
        },
        type: 'POST',
        datatype: 'json',
        cache: false
    });
});

这里是可用的 JSFiddle 版本的链接: http://jsfiddle.net/1ukyLgnh/5/

这是一个 Github 存储库,其中包含无法正常工作的完整内容: https://github.com/dhierholzer/Basiconlineorderingone

如果重要的话,我正在通过 WAMP 服务器对其进行测试,并通过名为 Light Table 的程序进行调试

最后一点,在我的 Github 版本上我添加了一行 window.alert(dataObj.stuff);只是为了确保这些值至少被传递了那么远,而且确实如此。任何帮助将不胜感激。

最佳答案

$.each 使用 length 属性,您的问题很可能与您调用的 AJAX 调用返回的数据有关每个。您可以通过更改 data.stuff 的名称在 jsfiddle 中轻松重现您的问题,您将收到错误: http://jsfiddle.net/7d2wqkpq/

并且您的调试警报中有错误。您正在检查 dataObj 是否正常,但 dataObj 是您在 ajax 调用中发送的对象,而不是返回的对象。将 alert(dataObj.stuff) 替换为 alert(data.stuff) ,您可能会得到未定义的结果。从那时起,修复您的代码应该很容易。

关于javascript - json/ajax 新手 .. 控制台错误是 Uncaught TypeError : Cannot read property 'length' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31867241/

相关文章:

javascript - jQuery.getJSON - 访问控制允许来源问题

javascript - 图片上传预览文件路径

php - 刷新html页面中的框架

html - 如何从我的 html 部门中删除空白?

javascript - 如何使用 Angular.js 路由 CodeIgniter?

javascript - 如何响应式地扩展 Vue.prototype

php - 在通过 'time1' =>urlencode($time1) 传输的时间上添加一个小时

javascript - 通过单击一个按钮调用两个 javascript 函数会得到与两个按钮不同的结果

javascript - 如何将没有特定事件的函数绑定(bind)到动态添加的元素?

javascript - 自定义验证器客户端的动态错误消息