如何使用jQuery JSONP进行跨域ajax调用

时间:2011-12-01 21:06:08

标签: jquery jsonp

我应该如何更改以下代码以使用jsonp加载XML跨域..

$.ajax({
    type: "GET",
    url: "http://www.w3schools.com/xml/note.xml",
    dataType: "xml",
    success: function(xml) {
        alert('Hi');
    }
});

希望我的问题得到解决。

4 个答案:

答案 0 :(得分:3)

您无法使用jsonp加载XML,因为必须以某种方式在json中写入数据。

我们假设您当前的数据是这样的:

<address>
  <fullname>John Doe</fullname>
  <street>1st street</street>
  <number>345</number>
  <zip>12345</zip>
  <city>Nowhere</city>
</address>

你必须用JSON发送它,就像那样:

{
  fullname: "John Doe",
  street: "1st street",
  number: 345,
  zip: "12345",
  city: "Nowhere"
}

此外,如果您需要通过JSONP接收它,您需要进行另一次修改。假设您发送的请求是这样的:

$.ajax({
  type: "GET",
  url: "http://www.w3schools.com/json/note.js",
  dataType: "jsonp",
  success: function(data) {
    alert('Hi');
  }
});

在调用Web服务时,jQuery将在请求URL中添加名为callback的参数。

假设生成的网址为:http://www.w3schools.com/json/note.js?callback=callback1234

然后,您的json输出将需要如下所示:

callback1234({
  fullname: "John Doe",
  street: "1st street",
  number: 345,
  zip: "12345",
  city: "Nowhere"
});

答案 1 :(得分:1)

据我所知,你不能(直接)使用JSONP加载XML数据。

带有JSONP的跨站点AJAX依赖于在动态创建的<script>标记内执行的Javascript函数调用中包装所需对象,并且没有使用XML执行此操作的机制。

即使JSONP要求远程服务器执行JSON包装 - 输出JSON数据的CGI脚本也不会自动支持开箱即用的JSONP。

如果您的数据实际上是标准FTP服务器上的普通XML文件,那显然是不可能的。

答案 2 :(得分:1)

在某些情况下,无法使用JSONP进行跨域。 请直接使用Jquery或使用XDomainRequest对象查找以下的跨域AJAX请求URL http://rajendrapathi.webs.com/apps/forums/show/14007722-jquery-and-javascript

答案 3 :(得分:0)

我认为如果你想接收JSONP,dataType应该是JSONP。

http://api.jquery.com/jQuery.ajax/