0

JSON オブジェクトを PHP ファイルに送信しています。PHP は何らかの操作を行い、JSON 文字列を返します。

$('button#indexOpener').on('click', function() {
    var aUsername = $('input#edUsername').val();    
    var aPassword = $('input#edPassword').val();

    if (($.trim(aUsername) != '') && ($.trim(aPassword) != '')) {
        var str = $("#form_login :input").serializeArray();
        $.post("<?php echo URL; ?>ajax/checklogin", str, function(data) {
            alert(data.edUsername); 
        }); 
    }
    else {
        alert('Please insert a valid username and password');
        alert("<?php echo URL; ?>/ajax");   
    }
});

PHP は JSON オブジェクトをエコーし​​ます。

echo json_encode($_POST);

しかし、jQueryでデータを警告しようとすると:

function(data) {
  alert(data.edUsername);   
}

undefined というメッセージが表示されます。ばかげていると思いますが、何が間違っているのかわかりません。助けてもらえますか?

4

2 に答える 2

3

にdataTypeが設定されていません$.post()。jQueryは返されたコンテンツタイプを認識しようとしますが、正しいヘッダーを設定する必要があります。したがって、次を追加する必要があります。

header("Content-Type: application/json");

の前にecho json_encode、またはJSコードでdataType: "json"を設定する必要があります(の4番目のパラメーター$.post()):

$.post("<?php echo URL; ?>ajax/checklogin", str, function(data) {
    alert(data.edUsername); 
}, "json");

このようにして、jQueryは、返されたデータがJSON形式であり、解析する必要があることを認識します。これがないと、jQueryはContent-Typeヘッダーをチェックし、それに応じてパーサーを適用します。カスタムコンテンツタイプヘッダーが設定されていない場合、戻りデータをHTMLとして返すとします。実際、それは通常の文字列です。

alert(data)が{"edUsername": "qqq" "edPassword": "qqq"}を返している場合でも、alert(data.edUsername);をアラートしている場合。「未定義」になりますか?

JSONは通常の文字列であり、クライアント側で解析する必要があります。jQueryは、応答をプレーンテキストまたはHTMLとして検出し、JSONをJavascriptオブジェクトに解析しません。データがオブジェクトの場合、アラートウィンドウに[objectObject]が表示されます。

于 2013-02-05T10:56:30.293 に答える
0

これは、次を使用してこのようにする必要があると思います$.getJSON()

var str = $("#form_login").serialize();

$.getJSON("<?php echo URL; ?>ajax/checklogin", {data:str}, function(data){
     alert(data.edUsername); 
});
于 2013-02-05T11:01:01.190 に答える