0

我需要在作为 HTTP 资源公开的外部域中调用远程“服务”。该服务仅接受 POST 请求。

所以,我不能使用 JSONP,因为它不支持 POST 方法。我不能使用 AJAX 请求,因为它是跨域请求。

简单的解决方案是使用 ServerXMLHTTP 对象来管理请求。缺点是使用 ServerXMLHTTP 请求是同步的。

任何的想法?

4

1 回答 1

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(比如 jQuery 的 getJSON)从您的客户端调用这个 Proxy.asp。因此,当您的服务器阻塞时,客户端的调用仍然是异步的。

客户端:

$.getJSON('proxy.aspx?RemoteMethodName=RemoteMethod1&Param1=Val1&Param2=Val2', function(data) {
    // data should be jsonResult
});
于 2012-05-14T22:32:00.953 回答