2012-03-07 106 views
0

我是新来javascript/jquery。jQuery.get()返回错误

我有以下的基本代码,我不断收到“错误”警报消息:

var jqxhr = $.get('my_url', 
       function(data) { 
       alert("success"); 
      }) 

      .success(function() { 
       alert("second success"); 
      }) 
      .error(function() { 
       alert("error"); 
      }) 
      .complete(function() { 
       alert("complete"); 
      }); 

需要注意的是,如果我复制并粘贴到浏览器中,我得到一个xml文件回来my_url。我究竟做错了什么?我如何获得详细的错误描述?

+0

使用浏览器的控制台及其网络选项卡。 – lonesomeday 2012-03-07 16:40:11

+1

只是为了确认,'my_url'是**不是**变量,对吗? – 2012-03-07 16:40:19

+1

使用Firebugs'net'标签查看正在发送和接收的内容。 – Fermin 2012-03-07 16:40:45

回答

1

你的错误:

XMLHttpRequest cannot load 'my_url'. Origin null is not allowed by Access-Control-Allow-Origin. 

表明您具有相同起源的问题。您不能对与主机网页的域不同的域执行ajax调用。

请参阅this MDN reference了解更多有关同一原产地政策同源产品的信息。

解决方法是使用JSONP(它使用不受同一起源策略限制的脚本标记),但这需要更改服务器以支持此操作的JSONP。

1

您是否在$ .ajaxSettings()函数中将响应类型更改为'text/xml'?

如果您希望'text/html'作为响应类型并获取'text/xml',那么这可能会导致问题。

此外,如果您使用Fiddler,您可以很好地了解响应中实际发生了什么。

+0

谢谢Qpirate,我通过使用Chrome的'ctrl-shift-J'找出了问题所在。评论中有更多信息,你知道如何解决这个问题吗? – Gevorg 2012-03-07 17:02:31

+0

我会使用JSONP来进行跨域调用。作为@ jfriend00提到。 – Qpirate 2012-03-08 12:37:42

1

确实只有三种方法可以解决交叉来源问题。

  1. 使远程服务器支持CORS
  2. 用户的代理脚本或代理服务,如YQL
  3. 使用JSONP数据类型,其不支持跨域请求。此解决方案要求服务器返回JSONP而不是XML