我需要在作为 HTTP 资源公开的外部域中调用远程“服务”。该服务仅接受 POST 请求。
所以,我不能使用 JSONP,因为它不支持 POST 方法。我不能使用 AJAX 请求,因为它是跨域请求。
简单的解决方案是使用 ServerXMLHTTP 对象来管理请求。缺点是使用 ServerXMLHTTP 请求是同步的。
任何的想法?
我需要在作为 HTTP 资源公开的外部域中调用远程“服务”。该服务仅接受 POST 请求。
所以,我不能使用 JSONP,因为它不支持 POST 方法。我不能使用 AJAX 请求,因为它是跨域请求。
简单的解决方案是使用 ServerXMLHTTP 对象来管理请求。缺点是使用 ServerXMLHTTP 请求是同步的。
任何的想法?
ServerXMLHTTP 将在您的应用程序托管的服务器端代码中使用,因此即使它是同步的,它也应该对您的应用程序很重要,因为使用常规 XmlHttp 调用此页面可能是异步的。本质上,您是在服务器中创建代理来克服浏览器的跨站点脚本限制。
服务器端:Proxy.asp
<%
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。因此,当您的服务器阻塞时,客户端的调用仍然是异步的。
客户端:
$.getJSON('proxy.aspx?RemoteMethodName=RemoteMethod1&Param1=Val1&Param2=Val2', function(data) {
// data should be jsonResult
});