关于ajax:经典asp跨域http请求与POST

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
});