JSON的应用程序/ json标题不适用于chrome / IE,而在Firefox上工作正常

时间:2012-09-13 10:39:24

标签: javascript jquery ajax json

我发送一个ajax请求来提取Web服务列表,然后在表中显示它们。但是,代码正确地在Firefox上运行,但在chorome和IE上没有。

AJAX请求:

$.ajax({
   url: 'http://dev.ragld.com/services/',
   method: 'GET',
   accept: 'application/json',
   beforeSend: setHeader,
   async: false, 
   success: function(data){  
       var servicesObj = $.parseJSON(data);

       $.each(servicesObj, function(i, serviceItem){
           alert(serviceItem.name);
       });
   }
});

//function to setup header information
function setHeader(xhr){
    xhr.setRequestHeader('accept', 'application/json'); 
}

JSON响应:

[
    {
        "name": "OS-ONS-bar",
        "type": "RelationshipService",
        "endpoint": "http://dev.ragld.com/services/bar/"
    },
    {
        "name": "OS-ONS-sameAs",
        "type": "RelationshipService",
        "endpoint": "http://dev.ragld.com/services/sameas/"
    },
    {
        "name": "Maths Service 2",
        "type": "ArithmeticService",
        "endpoint": "http://dev.ragld.com/services/arithmetic/"
    }
]

错误我使用以上代码进入chrome:

Uncaught TypeError: Cannot read property 'length' of null jquery.min.js:2
e.extend.each jquery.min.js:2
$.ajax.success admin.php:157
f.Callbacks.o jquery.min.js:2
f.Callbacks.p.fireWith jquery.min.js:2
w jquery.min.js:4
f.support.ajax.f.ajaxTransport.send.d jquery.min.js:4
f.support.ajax.f.ajaxTransport.send jquery.min.js:4
f.extend.ajax jquery.min.js:4
(anonymous function) admin.php:148
f.Callbacks.o jquery.min.js:2
f.Callbacks.p.fireWith jquery.min.js:2
e.extend.ready jquery.min.js:2
c.addEventListener.B

问题:

  1. 这适用于Firefox,但不适用于Chrome和IE。
  2. 现在,如果我删除此$.parseJSON,那么它将适用于chrome但不适用于firefox / IE
  3. PS:ajax请求是针对不同的服务器而且这个代码是不同的。任何人请建议适用于所有浏览器的解决方案???

    EDIT1: 看起来像chrome自动解析它或获取json头,而在Firefox中我们需要在parseJSON中明确地解析它?任何想法?

    EDIT2(来自FireFox的console.log):

    [{"name":"OS-ONS-bar","type":"RelationshipService","endpoint":"http:\/\/dev.ragld.com\/services\/bar\/"},{"name":"OS-ONS-sameAs","type":"RelationshipService","endpoint":"http:\/\/dev.ragld.com\/services\/sameas\/"},{"name":"Maths Service 2","type":"ArithmeticService","endpoint":"http:\/\/dev.ragld.com\/services\/arithmetic\/"}]
    
    来自Chrome的

    console.log: enter image description here

1 个答案:

答案 0 :(得分:3)

您应该将ajax option dataType指定为'json'。否则jQuery将不得不猜测它应该返回什么数据类型,你可能得到各种结果。

  

<强>字段类型字段

     

如果没有指定,jQuery将尝试根据MIME推断它   响应的类型(XML MIME类型将生成XML,在1.4 JSON中   将产生一个JavaScript对象,在1.4脚本中将执行该脚本,   其他任何东西都将作为字符串返回。)

查看适用于FF,IE和Chrome的demo

您应该检查XHR响应并确保您的服务实际上返回JSON。