2013-04-11 97 views
1

我有一个链接以下JSON:跨域JSON解析

{"edi":[{"NEdid":"19", "Publications":"B0001", "NCid":"141" 
, "SEditionCode":"C0001", "SLang":"English", "STimeZone":"GMT+4:00" 
, "SEdname":"Default", "NEdmon":"1", "NEdtue":"1", "NEdwed":"1" 
, "NEdthu":"1", "NEdfri":"1", "NEdsat":"1", "NEdsun;":"1" 
, "SFrequency":"Daily", "NSequence":"1", "dtCreatedOn":"2013-03-25 12:18:46.0" 
, "NCreatedBy":"3", "dtModifiedOn":"2013-03-25 12:18:46.0" 
, "NModifiedBy":"3", "BIsActive":"1", "BIsDeleted":"0", "NNoe":"7"}]} 

我想分析跨域JSON。我在页面加载一个php页面并使用localhost调用以下函数。我使用下面的代码:

function loadEditionList(edurl) { 

    if (window.XMLHttpRequest) { 
     // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
    } else { 
     // code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
      var jsonEdition = xmlhttp.responseText; 
      var objEdition = JSON.parse(jsonEdition); 

      for (var i = 0; i < objEdition.edi.length; i++) { 
       var editionname=objEdition.edi[i].SEdname; 
       alert(editionname); 
      } 
     } 
    } 
    xmlhttp.open("GET", edurl, true); 
    xmlhttp.send(); 
} 

上面的代码是在工作与IE有关安全警告信息,但它不是在浏览器和Mozilla的工作。 xmlhttp.status在chrome和mozilla中为0。

另一个码我用:

function loadEdition() 
{ 
var getUrl = 'someurl/desktopReader.do?numPublisher=3&type=Editions&numPublication=19'; 

       $.ajax({ 
        url : getUrl, 
        type : 'GET', 
        dataType : 'jsonp', 
        jsonp: 'jsonp', 
        crossDomain : true, 
        success: function() { alert('Success!'); },                            
        error: function() { alert('Uh Oh!'); }, 
       });   
} 

在这种情况下,我总是警告 '嗯哦!'。

请告诉我正确的方法!

+4

告诉jQuery的,它是会得到,如果服务器不发送* * JSONP JSONP也无济于事。的 – Quentin 2013-04-11 10:30:09

+2

可能重复[途径来规避同源策略(http://stackoverflow.com/questions/3076414/ways-to-circumvent-the-same-origin-policy) – Quentin 2013-04-11 10:30:23

+0

这是否其他域服务支持CORS?该其他域名服务是否支持[JSON * P *](http://en.wikipedia.org/wiki/JSONP)?如果没有,你必须使用代理。 – Bergi 2013-04-11 10:33:07

回答

0

也许问题出在服务器端。下面是例子,我给其他人:http://jsfiddle.net/YGm89/ 代码:

$.ajax({ 
    url: "http://ws.geonames.org/postalCodeSearchJSON", 
    dataType: "json", 
    data: { 
     postalcode_startsWith: request.term 
    }, 
    success: function(data) {alert("ok");} 
}); 

例与your code. 我删除了JSONP回调函数的名字,becouse我看不到任何在你提出要求。我asume,你做标准的JSON请求(不是JSON P)。

+0

它需要是JSONP,如果它是跨域的,除非你使用CORS(你的例子)。 – 2013-04-11 18:23:14

+0

谢谢你指点我。也许把它变成CORS是解决方案? 为什么要更换jsonp回调也是我的问题:'jsonp:'jsonp',' – Saram 2013-04-11 20:15:45