我需要在作为HTTP资源公开的外部域中调用远程“服务”。 该服务仅接受POST请求。
所以,我不能使用JSONP,因为它不支持POST方法。 我不能使用AJAX请求,因为它是跨域请求。
简单的解决方案是使用ServerXMLHTTP对象来管理请求。缺点是使用ServerXMLHTTP请求是同步的。
有什么想法吗?
答案 0 :(得分:1)
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从客户端调用此Proxy.asp(比如jQuery的getJSON)。因此,当您的服务器阻塞时,客户端的呼叫仍然是异步的。
客户方:
$.getJSON('proxy.aspx?RemoteMethodName=RemoteMethod1&Param1=Val1&Param2=Val2', function(data) {
// data should be jsonResult
});