来自NON-JSON服务的JSONP解析错误

时间:2012-10-16 19:50:19

标签: jquery ajax

enter code here有第三方网络服务(soap)从其网站上的搜索中返回值。我可以使用包含搜索参数的普通旧URL来调用此服务。恩。城市,州或邮编。此服务返回格式良好的XML字符串。

问题是......使用Javascript,我可以毫无问题地调用服务/网址。

但回调失败了。显示的消息表示解析错误。

使用firefox和firebug,我可以看到结果正确返回,只是用普通的旧XML。

似乎ajax回调试图解析结果,但它失败了。

此第三方位于完全不同的网站上,因此适用跨站点脚本规则。

所以问题是......

1)有没有办法不执行解析,只是得到结果? 2)我是否可以调整任何其他参数,以便我查看和处理结果集?

以下是我正在使用的代码......

  function LoadMenu() {
    varType = "GET";
    varUrl = "https://www.xxxx.com/soap/352mg/xml.php?callback=?";
    varData = { zip: 68105 };
    varContentType = "text/xml; charset=utf-8";
    varDataType = "jsonp";
    varProcessData = false;
    $.ajax({
      crossdomain: true,
      type: varType, //GET or POST or PUT or DELETE verb
      url: varUrl, // Location of the service
      data: varData, //Data sent to server
      contentType: varContentType, // content type sent to server
      dataType: varDataType, //Expected data format from server
      processdata: false, // varProcessData, //True or False
      success: function (msg) {//On Successfull service call
        serviceSucceeded(msg);
      },
      error: ServiceFailed// When Service call fails
    });
  }

1 个答案:

答案 0 :(得分:0)

JSONP是跨域限制的hacky解决方案,它在html中包含一个新的脚本标记,因此浏览器会自动解析src。你无法禁用它。

如果您需要获取XML并且他们不提供JSONP或某种跨域请求(如CORS),那么您将需要设置代理。通过设置代理,您可以使用其他方式(如PHP)获取数据,然后将其重新路由到您域中可能需要的任何页面。