2

ユーザーがMySQLデータベースに存在するかどうかを確認するためにjavascriptを取得しようとしています。

これを行うには、jQuery を使用して、MySQL データベースをチェックする PHP スクリプトにユーザーの詳細を投稿します。

jQuery POST はデータを PHP スクリプトに正常に渡します。私はこれをチェックしました:

  • PHPスクリプトにメールを送信して、データを取得したことを知らせます。
  • Firebug を使用して呼び出しを追跡する
  • Wireshark を使用してパケット交換をトレースすることにより、

しかし、jQuery は、PHP スクリプトから応答を取得するたびに、ステータスが 0 であると判断します。

firebug トレースおよび wireshark トレースでは、PHP スクリプトからの HTML 応答のステータスは常に「200 OK」です。

エンコーディングを強制的に json にしたり、jQuery POST 呼び出しでデータ型を「json」に設定したり、短いスリープをPOST の代わりに GET を使用するような PHP スクリプト。

HTML、javascript、および PHP を最小限に単純化しましたが、それでも jQuery に応答のステータスが 0 以外であると判断させることはできません。

私が今持っているもの:

HTML コード:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org    /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<SCRIPT SRC="Templates/nop_shopping_cart/jquery-1.7.2.js"></SCRIPT>
<script type="text/javascript">
function checkUser()
{
 alert("clicked");
    jQuery.post( 'http://solfacats.com/dsadmin/valUser2.php', {email: "test", password:  "test"}, function(data) { alert("returned"+data)}, "html" );

}
</SCRIPT>

<body>
<button onclick="Javascript: checkUser();"> "test" </button>
</body>
</html>

PHP コード:

<?php 
echo "test";
?>

注 - 何が起こっているかを追跡するために、jquery-1.7.2.js の done() 関数で alert() の呼び出しを使用しました。アラートの 1 つは、done() に渡された変数 status の値をポップアップ表示します。これは、変数 status の値が常にゼロであることを示しています。

また、注意してください-関数の早い段階で「status = 200」という行を追加してdone()関数をハックすると、jQuery.postのコールバック関数が呼び出されますが、データ変数の値が渡されたと考えられますそれにはnullです。

IE、Firefox、および Safari でこれを試してみましたが、すべて同じ問題が発生します。

jQuery を取得して PHP 応答が成功したと見なし、応答からデータを正常に抽出するために、ここからどこに行くべきかについて、誰かが良い指針を持っていますか?

4

1 に答える 1

0

コードをどのようにデバッグしているかは言えませんが、コードを試したときに、同じオリジンポリシーが別のドメインへのAJAXリクエストを妨げていることは明らかです。

を使用JSON-Pして、timeoutAJAX が実際に呼び出されたかどうかを確認できます。リクエストがタイムアウトした場合は、ネットワークの問題によってリクエストが殺されています。次のコードで追跡できます。

function checkUser() {
     alert("clicked");
     var email = "test";
     var password=  "test";
     var url = "http://solfacats.com/dsadmin/valUser2.php";
     $.ajax({
         url: url,
         type: "post",
         data: "email="+ email + "&password=" + password,
         dataType: 'jsonp', //it helps you in cross-domain data transfer
         crossDomain : true,
         timeout : 2500, /* it is in milliseconds (i have greater timeout 
                         as my net is very slow, generally a timeout of
                         500 milliseconds will be sufficient)*/
         complete : function(xhr, responseText, thrownError) {
             if(xhr.status == "200") {
                alert(responseText); //yes response came
             }
             else{
                alert("No response"); //no response came
             }
         }
     });
 }

これにより、応答を得ることができます。しかし、コンソールにJSエラーがスローされます。JSON-P でデータを渡すには、サーバー側で正しくフォーマットされたデータを生成する必要があります。応答の有効な例は次のとおりです。

parseResponse({"Name": "Foo", "Id" : 1234, "Rank": 7});

お役に立てれば。ハッピーコーディング。:)

于 2012-04-22T11:05:54.267 に答える