10

別のドメインにajaxリクエストを送信しようとしていますが、すでに機能していますが、別の問題が発生しています...

これは私のコードです:

function getChannelMessages(channel) {
    jQuery.support.cors = true;
    $.ajax(channel, {
        cache : true,
        type : "get",
        data : _channels[channel].request,
        global : false,
        dataType : "jsonp text xml",
        jsonp : false,
        success : function jsonpCallback (response) {
            console.log(response);
            updateChannelRequest(channel);
            //getChannelMessages(channel);
        }
    });
}

私が言ったように、それはすでに機能していますが、問題はサーバーがXMLを返すことです(私のサーバーではなく、別の会社の別のサーバー(Webサービス)なので、返されるものを変更することはできません)そしてjsonpはjsonを期待していますエラーで失敗します:

SyntaxError: syntax error
<?xml version="1.0"?><ReceiveMessageResponse xmlns="http://q ... />

jQueryのドキュメントによると、追加jsonp text xmlすると魔法がかかり、応答が単純なテキストに変換されてからXMLとして解析されますが、機能しません。

すでにYQLを使用して作成できましたが、1時間あたりのリクエスト数は10,000に制限されており、開発中のシステムでは1時間あたり最大1,000万のリクエストがあります。同じ理由で、私は自分のサーバーでそれらの要求を「プロキシ」することはできません...

参考:SQSから最新のメッセージを取得しようとしているので、データをjsonとして返すように指示する方法があれば、より簡単で優れたものになりますが、ドキュメントにも何も見つかりません...

4

1 に答える 1

11

私の質問に対する簡単な答えは次のとおりです。これを行うには2つの方法しかありません。

  1. プロキシを使用します。作成方法のすべてをここに記載するわけではありませんが、「cors」、「cross domain ajax requests」、および「yql」を検索すると、Web で多くの情報を見つけることができます (これは Yahoo によるプロキシです)。

  2. CORS を使用します。これがCross-Origin Resource Sharingです。つまり、情報を取得するサーバーをアクティブにして、他のドメインに情報を送信し、他のドメインからの要求に応答します。これを行うには、サーバー/サービスを管理する必要があります。

この 2 つは、別のドメインから情報 XML (またはその他の形式) を取得する唯一の方法です。json クロス ドメイン リクエストを作成するには:

  • jsonp (Json Padded) を使用します。これについては説明しません (サーバーからの回答が XML の場合は機能しないため、実際には余分な情報です。私の主な問題です) 。Web に 多くの 情報があります

残念ながら、SQS がこのメソッドのいずれにも構成されていないため、目標を達成できませんでした... それでも、クロスドメイン要求がどのように機能するかについて十分な洞察を得ています。そして、これが誰かの助けになることを願っています...

于 2013-03-22T16:41:18.790 に答える