经典的asp跨域http请求与POST

时间:2012-05-11 16:42:54

标签: ajax post asp-classic jsonp httprequest

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

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

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

有什么想法吗?

1 个答案:

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