javascript - 无法访问从 ajax 调用返回的对象的属性

标签 javascript jquery ajax jquery-events

我对 JS 和 jQuery 还很陌生。

我在访问从 jQuery ajax 方法返回的对象的属性时遇到问题。

正如您在下面的代码中看到的那样,我尝试在成功回调函数中使用对象“数据”的属性来创建表格行,然后我尝试将其添加到表格中。

$('#add_comp').submit(function(){
        
        var startDate = $('#form_startDate').val();
        var initPrize = $('#form_init_prize').val();
        var active    = $('#form_active').val();

        var dataString = 'startDate=' + startDate + '&startPrize=' + initPrize + '&active=' + active;

        $.ajax({
            type: 'POST',
            url: "/admin/competition/add-competition",
            data: dataString,
            success: function(data, textStatus, xhr){
                console.log(data);
                console.log(data.startDate);
                console.log(data[startDate]);
                console.log(data['startDate']);
                
                var tr = '\n\
                          '+ data["startDate"] +'\n\
                          '+ data.active +'\n\
                          '+ data.currentPrize +'\n\
                          ';
                $('#competition_table').find('tr:last').after(tr);

            },
            error: function(){
                alert('There has been an error, please consult the application developer.');
            }

        });

success 函数有点乱,因为我正在尝试多种不同的方法来访问数据对象的属性。

第一个 console.log(data) 行在 Firebugs 控制台中返回以下内容:

{"competitionId":null,"startDate":"08\/02\/2010","endDate":null,"winner":null,"participantPool":"4c6729aa8c8fb","active":1,"startPrize":"350","currentPrize":"350"}

这确认数据对象存在并且具有正确的属性。

我假设我应该能够使用“data.propertyName”访问各个属性,但是所有后续 console.log() 调用都返回“undefined”。

如何正确访问这些属性并使用它们来构建表格行?

最佳答案

要读取 data 对象的属性,data.startDatedata["startDate"] 都应该有效。

正如 jaywon 所指出的,问题在于您的数据对象是一个字符串,而不是一个对象。您可以通过添加另一行 console.log 来确认这一点,如下所示:

console.log(typeof data);

这将打印出“string”而不是“object”。您可以通过正常方式打印出字符串对象的属性,例如字符数为:

console.log(data.length);

要让 jQuery 为您解析 JSON,您需要按照 jaywon 的描述设置 dataType 属性,或者在提供 json 时包含此内容类型 header :

Content-Type:text/json

如果您从服务器中包含此 header ,则您的示例代码会将正确的属性打印到控制台。

最后,要向表格中添加一行,您需要附加表格行而不是纯文本字符串,因此您应该将 var tr = ... 行更改为:

var tr = '<tr>' +
             '<td>' + data.startDate    +'</td>' +
             '<td>' + data.active       +'</td>' + 
             '<td>' + data.currentPrize +'</td>' +
         '</tr>';

关于javascript - 无法访问从 ajax 调用返回的对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485671/

相关文章:

javascript - 在 5 秒内从 0 增加到一个值

javascript - jQuery:向元素内的数字加一

jquery - 通过 POST (ajax) 发送 JSON 数据并从 Controller (MVC) 接收 json 响应

javascript - AJAX:使用 jQuery 的 .ajax() 而不是 XMLHttpRequest 的优势?

javascript - 如何在提交前显示掉落图像的缩略图

javascript - 表单提交后没有响应,页面只是自动重新加载

javascript - 在 jQuery 中等待所有图像加载的更有效方法

javascript - 仅当外部更改时才触发 $watch

javascript - 如果我从之前的 js 确认脚本中单击 "cancel",有没有办法阻止表单提交?

jquery - 如何自定义DevExtreme数据网格确认消息