HTTP リソースとして公開されている外部ドメインで、リモートの「サービス」を呼び出す必要があります。このサービスは、POST 要求のみを受け入れます。
JSONP は POST メソッドをサポートしていないため、使用できません。クロス ドメイン リクエストであるため、AJAX リクエストを使用できません。
簡単な解決策は、ServerXMLHTTP オブジェクトを使用して要求を管理することです。欠点は、ServerXMLHTTP では要求が同期的であることです。
何か案が?
HTTP リソースとして公開されている外部ドメインで、リモートの「サービス」を呼び出す必要があります。このサービスは、POST 要求のみを受け入れます。
JSONP は POST メソッドをサポートしていないため、使用できません。クロス ドメイン リクエストであるため、AJAX リクエストを使用できません。
簡単な解決策は、ServerXMLHTTP オブジェクトを使用して要求を管理することです。欠点は、ServerXMLHTTP では要求が同期的であることです。
何か案が?
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
});