0

次のように指定されているアプリケーションに少し問題があります。

クレジットカード決済Webサービスにデータを郵送する必要があるため、Webサービスは情報を処理してXMLを返します。

$.post()私はjQueryAjaxメソッドでそれができると思いました。それが私のコードです:

$.post("https://comercio.locaweb.com.br/comercio.comp", { 
identificacao: dadosPagamento[0], 
modulo: dadosPagamento[1], 
operacao: dadosPagamento[2], 
ambiente: dadosPagamento[3], 
bin: dadosPagamento[4], 
idioma: dadosPagamento[5], 
valor: dadosPagamento[6], 
pedido: dadosPagamento[7], 
descricao: dadosPagamento[8], 
bandeira: dadosPagamento[9], 
forma_pagamento: dadosPagamento[10], 
parcelas: dadosPagamento[11], 
autorizar: dadosPagamento[12], 
capturar: dadosPagamento[13] 
},
function(data) {
alert(data);
window.open('../negocio/index.php?mod=cliente&acao=gambs&xml=' + encodeURI(data));
$('#resultadoFinal').html(data);
}
);

応答をテストするためだけに使用しているalert(data)で、問題は次のとおりです。ローカルテストファイル(@ window.open('../negocio/...'))に送信すると、応答は正常に機能します。それ以外の場合、Webサービス(https://comercio.locaweb.com.br...)では応答がなく、私が待っているXMLは存在しません。

誰かが何が起こっているのか知っていますか?または、間違った方法で行っている場合、誰かがXML送信データをPostで取得するためのより良い方法を教えてもらえますか?

ありがとうございました。

4

2 に答える 2

3

ビニシウス、

別のドメインで実行されているWebサービスと対話するためにajaxを使用しようとしているようです。ブラウザは、ajaxリクエストを行うときに同一生成元ポリシーに従うため、これを許可しません。

この制限を回避する方法はいくつかあります。その1つは、PHPサイトでWebリクエストを実行するプロキシをホストすることです。次に、コードでホストするページ(同一生成元ポリシーで許可されている)をリクエストできますが、必要なこのサービスを呼び出すことはできます。このページには、このプロキシページのサンプルPHPコードも含まれている、この制限の詳細な説明があります。

easyXDMと呼ばれるJavaScriptライブラリもあります(これは上記のウィキペディアの記事で言及されています)。このライブラリは、ユーザーのブラウザに基づいて、このクロスサイト通信を実行するために使用する最適な方法を決定します。このプロジェクトの詳細については、こちらをご覧ください。広く使用されているeasyXDMが実際にどれほど広く使用されているかはわかりませんが、IE6-7より前にユーザーのコンピューターにフラッシュをインストールする必要があることがわかります。これは、この支払いサービスを使用するには、サイトのIE 6-7ユーザーがフラッシュをインストールする必要があることを意味します(潜在的な頭痛の種になる可能性があります)。

個人的には、必要がない限り、このような依存関係のユーザー依存関係を追加することはあまり好きではないので、プロキシソリューションを実装しようとします。

于 2011-07-22T18:06:34.353 に答える
1

David Ipsenは、同一生成元ポリシーを指摘しました。

これを回避するには、ドメインにphpファイルを作成して、目的のWebサービスにカールさせ、$ post()関数を変更して、ajaxを介してサーバー上のphpファイルを呼び出すようにします。

于 2011-07-22T20:15:40.213 に答える