我的jQuery AJAX POST调用的JSON结果在哪里?

时间:2010-09-02 01:33:17

标签: jquery ajax json http post

我在网页中设置了此代码。

    <div id="gridResults">
</div>

<script type="text/ecmascript">
    jQuery.ajax({
        url: "http://localhost:6002/AggregateServices.svc/incident/10",
        type: "POST",
        async: true,
        success:
                function(json) {
                    var table = jQuery('<table />').attr('cellspacing', 0).attr('cellpadding', 4);
                    var header = jQuery('<tr />')
                        .append('<td>Case Number</td>')
                        .append('<td>Company</td>')
                        .append('<td>Created</td>')
                        .append('<td>Description</td>')
                        .append('<td>Stamp</td>')
                        .append('<td>Status</td>')
                        .append('<td>Type</td>');
                    table.append(header);
                    var row = jQuery('<tr/>')
                        .append('<td>' + json.CaseNumber + '</td>')
                        .append('<td>' + json.Company + '</td>')
                        .append('<td>' + json.Created + '</td>')
                        .append('<td>' + json.Description + '</td>')
                        .append('<td>' + json.Stamp + '</td>')
                        .append('<td>' + json.Status + '</td>')
                        .append('<td>' + json.Type + '</td>');
                    table.append(row);
                    jQuery('#gridResults').append(table).show();
                },
        error: function() { alert('An error occurred!'); }
    });
</script>

当我运行代码时,我最终得到了这个结果。

使用jQuery的简单AJAX示例。

案例编号公司创建说明邮票状态类型 undefined undefined undefined undefined undefined undefined undefined

我通过Fiddler 2检查,使用POST,以确保我得到了回报。我看到与Fiddler一起回来的结果如下:

{“CaseNumber”:“2”,“公司”:“公司”,“创建”:“9/1/2010 6:31:45 PM”,“描述”:“有些描述在这里。”, “印记”: “/日期(-62135568000000-0800)/”, “状态”: “统计”, “类型”: “类型”}

那看起来好看的JSON?任何人都知道为什么这不解析?或者我错过了其他什么?

故障排除故障:

我试着把行放到一个追加循环中,想着......不确定我在想什么,但无论如何它都无济于事。我所做的就是这个,唯一的区别是它甚至没有给我第一个样本结果中的“未定义”。

jQuery.each(json, function() {
var row = jQuery('<tr/>')
    .append('<td>' + this.CaseNumber + '</td>')
    .append('<td>' + this.Company + '</td>')
    .append('<td>' + this.Created + '</td>')
    .append('<td>' + this.Description + '</td>')
    .append('<td>' + this.Stamp + '</td>')
    .append('<td>' + this.Status + '</td>')
    .append('<td>' + this.Type + '</td>');
table.append(row);});  

5 个答案:

答案 0 :(得分:3)

您需要告诉jQuery将结果解析为JSON,方法是将dataType: 'json'添加到ajax参数中。

答案 1 :(得分:1)

你尝试过使用json.d或json.data吗?

答案 2 :(得分:0)

当ajax调用完成时,jQuery通常不会将json数据作为函数参数发送,如果它发送它,则只需要字符串代码,您需要进行评估。尝试以下任何一个想法:

1- do

var j = eval(json);

而不是

.append('<td>' + json.Company + '</td>')

DO

.append('<td>' + j.Company + '</td>')

或使用

jQuery.getScript()

而不是jQuery.Ajax()

我更喜欢第二个,因为它是我使用的那个

答案 3 :(得分:0)

您的退回对象是否有名称?

您正在进行MyObj obj = new MyObj();然后设置属性然后返回该对象吗?

如果您是,那么您还需要在对象中考虑MyObj因此我认为,未经测试,json.d.MyObj或仅json.MyObj.propertyName;

答案 4 :(得分:0)

在与代码来回反复之后,我意识到我做错了什么。这是在两个不同的项目中,一个WCF和一个ASP.NET MVC项目,jQuery调用服务。这两个项目都在使用Cassinni,这本身就是真正的问题所在。我在一个端口上安装了WCF项目,在另一个端口上安装了ASP.NET MVC,但两者都是从localhost运行的。这导致了same origin problem。我在一个项目中再次设置整个解决方案(因为我很难,并且不想安装和运行IIS来删除Cassinni作为问题)。我在这里概述了我的整个解决方案tying it all together

总而言之,上面的代码实际上是正确的,确实有效。然而,端口使其在任何安全兼容的浏览器(换句话说,非IE浏览器)中失败。 IE似乎喜欢忽略相同的原始问题,将其视为浏览器的安全问题。 :/