2012-03-27 39 views
6
jQuery.ajax({ 
      type: "GET", 
      url: 'http://example.com/restaurant/VeryLogin(username,password)', 
      dataType: "json", 

      success: function (data) { 
       alert(data); 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       alert("error"); 
      } 
     }); 

它警告成功,但数据为空。 url返回xml数据,如果我们指定dataType,我们可以得到json数据,但是这里没有得到任何数据。如何使用ajax调用跨域web api?

任何帮助表示赞赏。

回答

9

JavaScript受同一域名政策约束。这意味着为了安全,客户端浏览器中的JS脚本只能访问它来自的同一个域。

JSONP不受同样的限制。

检查JSONP jQuery的文档在这里:

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

下面是使用JSONP通过JQuery AJAX访问跨域服务的工作示例:

http://jsbin.com/idasay/4

而且以防万一JSBIN将来删除此贴:

jQuery.ajax({ 
    type: "GET", 
    url: 'http://api.geonames.org/postalCodeLookupJSON?postalcode=6600&country=AT&username=demo', 
    dataType: "jsonp", 
    cache: false, 
    crossDomain: true, 
    processData: true, 


    success: function (data) { 
     alert(JSON.stringify(data)); 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert("error"); 
    } 
}); 
+0

我已经按照链接,但它没有产生结果。 – tiru 2012-03-27 13:07:29

+0

从以前发布的链接中获取: “由于浏览器安全限制,大多数”Ajax“请求都遵循相同的源策略;请求无法成功从不同的域,子域或协议中检索数据。不受相同的原产地政策限制。“ – 2012-03-27 13:09:07

+0

我会建议看看如何在上面的链接中使用JSONP示例来实现你所需要的。 – 2012-03-27 13:09:57

0

查找jsonp数据类型。

jQuery.ajax({ 
     type: "GET", 
     url: 'http://xxx.com/restaurant/VeryLogin(username,password)', 
     dataType: "jsonp", 
    cache: false, 
     crossDomain: true, 
    processData: true, 

     success: function (data) { 
      alert(data); 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert("error"); 
     } 
    }); 
+0

我跟着你的修改螺母没有结果。 – tiru 2012-03-27 13:16:55

+0

你必须阅读关于jsonp。然而,你所调用的页面并没有返回jsonp数据。 – 2012-03-27 13:23:53

2

无法使用Ajax直接获取跨域数据而无需更改后端。它叫做Same origin policy

您可以在后端设置特殊标头Access-Control-Allow-Originhow do to this)。或者你可以使用JSONP](http://en.wikipedia.org/wiki/JSONP)。