4

を使用してphpファイルを呼び出しています$.post。サーバーからjson応答を返しています。サーバーのURLをブラウザで直接開くと、正常に返されます。しかし、jsからは機能していません。 ここに画像の説明を入力 私が呼び出しているリンクは this( http://54.249.240.120/qcorner/login) です。

<html>                                                                  
    <head>                                                                  
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    </head>                                                                 
    <body>
        <input type="button" id="testID">
        <script type="text/javascript">                                         
            $(document).ready(function() {
                $("#testID").click(function() {
                    $.post('http://54.249.240.120/qcorner/login',function(result){
                        alert(result);
                    });
                });
            });
         </script>                                                               
     </body>                                                                 
 </html>

Firefoxでも試しました。その中で私は 200 OK を取得しますが、応答はありません。

なぜこれが起こっているのか

4

5 に答える 5

5

問題は、それがクロス ドメイン リクエストであることです。返されたエラーは、javascript コンソールをオンにすることで表示できます。

XMLHttpRequest cannot load http://54.249.240.120/qcorner/login. Origin null is not allowed by Access-Control-Allow-Origin.

これを許可するようにヘッダーが設定されていることを確認する必要がありますAccess-Control-Allow-Origin。そうしないと、Chrome がリクエストをキャンセルします。

于 2013-04-03T20:17:30.510 に答える
1

クロスオリジン リソース共有の問題が発生していると思われます。Chrome が [ネットワーク] タブに明示的に表示していることを考えると、あなたは からこのページにアクセスしhttp://54.249.240.120/ていないと思います (通常、同じドメインの場合は表示されません)。

簡単に言うと、Javascript 経由で別のドメイン名に投稿することはできません。www.example.com でこれにアクセスしている場合、ブラウザーは IP アドレスを同じドメイン名として認識しません (ドメイン名がそこで解決されても)。状況全体を管理している場合、最も簡単な方法は、テストしているコードと同じドメインにそのログイン コードを配置することです。ローカル環境では、[hosts ファイルを使用してこれを行うことができます。54.249.240.120 www.example.comたとえば、example.com (テスト ページにアクセスしている独自のドメインに置き換えます) を IP アドレスにリダイレクトします。ただし、これは公共のインターネットでは機能しません。

JavaScript を介して別のドメインに POST する必要がある場合は、CORS 標準の実装を検討する必要があります。これは、PHPで実装する方法を説明している記事です。

于 2013-04-03T20:17:53.043 に答える
0

HTML 200 OK は有効な応答とは異なります。これは、サーバーがリクエストを受け取ったことを意味しますが、PHP ファイルが実際に使用可能なデータを返したことを意味するわけではありません。完全に空の応答を返す可能性があります。PHP ファイルをデバッグします。一時的にファイルにログを記録するか、FirePHPを使用することをお勧めします。エラー表示が無効になっている場合 (実稼働サーバーではそうあるべきです)、出力が生成される前にスクリプトが失敗すると、これが発生する可能性があります。

于 2013-04-03T20:15:27.183 に答える
0

私はあなたと同じ問題を抱えていましたが、私がしたことは非常に簡単です。ajax リクエストを受け取る PHP ファイルで、レスポンスを送信する前に次の行を追加します。

<?php 
     header("Access-Control-Allow-Origin: *");
     ... // your code here
?>
于 2016-06-10T11:26:17.550 に答える
0

リクエストで正確に何が起こっていますか?質問に記載されているものを使用して、クロスドメインの ajax リクエストを作成することはできません。

ただし、空の POST 要求を URL に送信しています。空の POST 要求を複製すると、HTTP 206 エラーが返されます。これを解決する必要があります。

curl -X POST http://54.249.240.120/qcorner/login

{"head":{"status":206,"message":"Only 0 fields received, required 2"},"body":""}

于 2013-04-03T20:17:52.247 に答える