classic asp cross domain http request with POST
我需要在作为 HTTP 资源公开的外部域中调用远程"服务"。
该服务仅接受 POST 请求。
所以,我不能使用 JSONP,因为它不支持 POST 方法。
我不能使用 AJAX 请求,因为它是一个跨域请求。
简单的解决方案是使用 ServerXMLHTTP 对象来管理请求。缺点是使用 ServerXMLHTTP 请求是同步的。
有什么想法吗?
ServerXMLHTTP 将在您的应用程序托管的服务器端代码中使用,因此即使它是同步的,它对您的应用程序也应该很重要,因为使用常规 XmlHttp 调用此页面可能是异步的。本质上,您是在服务器中创建代理来克服浏览器的跨站点脚本限制。
服务器端:Proxy.asp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <% Function RemoteMethod1(ByVal param1, ByVal param2) 'Use ServerXMLHttp to make a call to remote server RemoteMethod = ResultFromRemoteServer End Function Function RemoteMethod2(ByVal param1, ByVal param2) 'Use ServerXMLHttp to make a call to remote server RemoteMethod = ResultFromRemoteServer End Function 'Read QueryString or Post parameters and add a logic to call appropriate remote method sRemoteMethodName = Request.QueryString("RemoteMethodName") If (sRemoteMethodName = RemoteMethod1) Then results = RemoteMethod1(param1, param2) Else If (sRemoteMethodName = RemoteMethod2) Then results = RemoteMethod1(param1, param2) End If 'Convert the results to appropriate format (say JSON) Response.ContentType ="application/json" Response.Write(jsonResults) %> |
现在使用 AJAX(比如 jQuery 的 getJSON)从您的客户端调用这个 Proxy.asp。因此,当您的服务器阻塞时,客户端的调用仍然是异步的。
客户端:
1 2 3 | $.getJSON('proxy.aspx?RemoteMethodName=RemoteMethod1&Param1=Val1&Param2=Val2', function(data) { // data should be jsonResult }); |