50

Postman という非常に便利な Chrome 拡張機能を見つけました。これは、特に RESTful アプリケーションのプログラミングを行う場合に非常に便利な拡張機能です。

私が混乱していることの 1 つは、このプラグイン/拡張機能がどのようにして異なるドメインで POST リクエストを正常に送信できるかということです。

このように Postman を使用してアンケートに投票してみました。

Postman を使用した投票

それを提出した後、実際に投票がカウントされましたが、AJAX と JavaScript を使用してそれを実行しようとすると、ブラウザーのオリジン ポリシーが異なるため失敗します。

それはどのように可能ですか?

これがjQueryを使用した私のコードです。私は自分のコンピューターでそれを使用しましたが、localhost.

init: function() {
    $.ajax({
        url: 'http://example.com/vote.php',
        type:'POST',
        dataType: 'html',
        data: {
            id: '1'
        },
        success: function(data) {
        if ( data == 'voted' ) {
            $('.set-result').html( 'you already voted. try again after 24 hours' );
        } else {
            $('.set-result').html( 'successfully voted' );
        }
    }
    });
},
4

4 に答える 4

18

postman で送信された Ajax リクエストに次のヘッダーを追加できます。

Content-Type      application/json

X-Requested-With  XMLHttpRequest

スクリーンショット

ここに画像の説明を入力

オリオン功績

于 2017-10-26T13:32:15.477 に答える
3

投票をホストするサイト (「vote.php」スクリプト) には、サイトのリスト (またはすべてのサイト) からの投稿を許可するために「Access-Control-Allow-Origin」ヘッダーを設定する必要があるようです。

ヘッダーの * の値は、任意の Web サイトからの投稿を許可します。

Access-Control-Allow-Origin: *

つまり、vote.php の先頭に以下を配置できます。

header('Access-Control-Allow-Origin: *');

Chrome の拡張機能とアプリは、通常の Web ページに課せられているのと同じセキュリティ制限の対象ではありません。

その他のデバッグのヒント:

ブラウザでローカル ファイル システム上で開いている Web ページからリモート サービスにアクセスしようとしている場合、Web サービスから提供されるファイルとは異なるセキュリティ ルールがブラウザに適用されることがあります。

C:\MyDocuments\weboot\index.htmたとえば、ブラウザーで(Windows) や(Mac) などの場所からローカル ファイルを開く\Users\joe\Sites\index.htmlと、ほとんどのブラウザーでヘッダーが指定されていても、AJAX 要求が機能しない場合があります。

Apple の Safari は、ローカルで開かれるファイルにクロス ドメイン制限をほとんど適用しませんが、Firefox は許可する内容についてはるかに厳密であり、Chrome はその中間にあります。http://localhost/予期しない動作を避けるために、Web サーバーをローカルで (例えば で) 実行することをお勧めします。

さらに、Ajax リクエストを処理する関数を提供する他のライブラリ (AngularJS など) では、デフォルトでサーバーに他のヘッダーを設定する必要がある場合があります。通常、ブラウザのデバッグ コンソールで失敗の理由を確認できます。

于 2014-06-06T00:41:34.220 に答える