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 に答える