如何对另一个域进行ajax调用?

时间:2011-09-13 22:08:01

标签: c# javascript jquery ajax

我正在尝试构建一个与attask.com的REST API通信的接口。他们的API很方便,因为它返回JSON。我认为这很完美,因为我可以忘记服务器端的C#代码,只需使用jQuery和AJAX编写接口。但是,当我尝试向他们的API发出AJAX请求时,我在Chrome的javascript控制台中收到错误:

  

Access-Control-Allow-Origin不允许原点http://mysite.com

这是什么意思?这是浏览器阻止请求吗?如果是这样,为什么?

更新

如果我对服务器没有任何控制权并且它没有响应JSONP请求,那么我唯一的选择是使用服务器端REST客户端并让我的AJAX与我自己的域进行通信而不是试图交叉 - 结构域

4 个答案:

答案 0 :(得分:1)

或者,您可以使用现代浏览器支持的未来标准Cross Origin Resource Sharing,并使用其他浏览器回退到JSONP。

答案 1 :(得分:1)

我发现jQuery-JSONP是最简单的方法 jQuery JSONP是jQuery实现JSONP的替代解决方案

jQuery-JSONP功能:

  1. 网络故障或格式错误的JSON响应时的错误恢复,
  2. 精确控制回调命名及其传输方式 URL,
  3. 同时运行相同回调名称的多个请求,
  4. 两种缓存机制(基于浏览器和基于页面),
  5. 可以像其他任何AJAX请求一样手动中止请求,
  6. 超时机制。
  7. 用于从YouTube获取用户个人资料的示例代码

    function getProfile(userId) {
    
        $.jsonp({
          "url": "http://gdata.youtube.com/feeds/api/users/"+userId+"?callback=?",
          "data": {
              "alt": "json-in-script"
          },
          "success": function(userProfile) {
              // handle user profile here 
          },
          "error": function(d,msg) {
              alert("Could not find user "+userId);
          }
        });
    }
    

    了解更多samples

答案 2 :(得分:0)

你想要使用JSONP,JQuery对内置的内容有很好的支持。See JQuery Documentation for more info.

答案 3 :(得分:-1)

您需要发出JSONP请求来执行跨域AJAX请求,您可以通过附加

来执行此操作
callback=?

将您发送请求的网址发送到