2011-05-16 75 views
1

Ho我可以绕过这个限制吗? 我知道我可以使用某种代理,但不知道这个代理应该是什么样子?xmlHttpRequest和跨网站限制

其他建议?

+0

[Cross-site XMLHttpRequest]可能重复(http://stackoverflow.com/questions/395045/cross-site-xmlhttprequest) – Hamish 2014-01-10 06:09:27

回答

0

您可以使用$ .ajax()调用。

这有属性crossdomain:它处理跨域请求。

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

对于跨域请求使用jQuery看看在 http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-domain-ajax-request-with-yql-and-jquery/

+0

你可以添加代码示例 - 我如何使用它而不是xmlHttpRequest(例如DELETE请求,而不是POST或GET请求)。 – 2011-05-16 11:26:13

+0

这个属性实际上是否会取代代理的需求,例如在google.ca上执行ajax请求? – 2011-05-16 11:27:49

+0

@Erik:编辑答案 – dhinesh 2011-05-16 11:54:28

1

JSONP正是用于此目的

JSONP或“JSON具有填充”是 补充到基座JSON数据 格式,使用模式,其允许 一个页面从服务器请求数据 在不同的域中。作为针对此问题的解决方案 ,JSONP是 替代称为跨源资源共享的更新方法 。

这是JSONP实现的非常非常基本的例子。

服务器端代码 -

public string GetFirstName() 
     { 
      string callback = Request.QueryString["callback"]; 
      string resultJson = "{\"FirstName\": \"archil\"}"; //should definitely be some more application specific data :) 

      if (!string.IsNullOrEmpty(callback)) 
      { 
       return string.Format("{0}({1})", callback, resultJson); 
      } 
      return resultJson; 
     } 

此方法被映射到/ URL的getFirstName上服务器。它从查询字符串中提取参数callback。并将生成的resultJson封装为javascript函数调用,其中函数的名称是使用回调传递的参数。

在客户端

,使用jQuery - 实现很简单,只要

$(function() { 

     $.ajax('http://serverUrl/GetFirstName', { 

      dataType: 'JSONP', 

      jsonpCallback: 'alert' 

     }); 

    }); 

这将传递函数名alert回调服务器。服务器将返回alert({"FirstName": "archil"})。 jQuery将自动检查这个响应并执行它。因此,您将在浏览器中获得标准警报屏幕。主要思想是执行alert将服务器的返回参数。您可以将更多特定的函数名称作为jsonpCallback传递,并根据请求的结果进行操作。

我知道,这里使用的URL模式更像REST风格的RPC样式的Web服务,但例子是关于使用JSONP,不是REST架构

+0

我不知道我如何使用JSONP来执行REST请求 – 2011-05-16 11:35:36

+0

顺便说一句,你不能执行REST请求,你的意思是HTTP请求的请求。 JSONP应该被服务器支持。阅读维基百科文章,有关于它的完整说明 - http://en.wikipedia.org/wiki/JSONP#How_it_works – archil 2011-05-16 11:41:03

+0

您可以通过在客户端使用http://api.jquery.com/jQuery.ajax/来简化任务 – archil 2011-05-16 11:44:34

0

以下基本步骤来创建这样的代理。

  • 创建服务器端页面(使用PHP或ASP.NET这样的服务器端语言并不重要)并将其称为例如“MyProxy”。aspx“
  • 在服务器端代码中,读取通过URL或POST数据发送的数据,并将该数据作为Web请求发送到外部网站(在.NET的情况下,在PHP和其他语言中肯定是等效的)。
  • 解析从外部网站发送的结果并将其发送回客户端
  • 在客户端,向代理页面(例如MyProxy.aspx)发送AJAX请求,并传递适当的数据并处理响应。

让我们知道您正在使用的服务器端语言更多的技术帮助实现上述。