3

php jquery / json/ajaxからの応答を取得するのに問題があります。私はこれらの異なるチュートリアルをすべて一緒に組み合わせ続けていますが、私がやろうとしていることに従うチュートリアルがないため、それでもすべてをまとめることができないようです。

現在、2つの配列を(連想配列を渡す簡単な方法がないため)jquery ajax関数に渡して、アラートを出そうとしています。これが私のコードです:

PHP

$names = array('john doe', 'jane doe');
$ids = array('123', '223');

$data['names'] = $names;
$data['ids'] = $ids;

echo json_encode($data);

Jquery

function getList(){
    $.ajax({  
        type: "GET", 
        url: 'test.php', 
        data: "",  
        complete: function(data){ 
            var test = jQuery.parseJSON(data);
            alert(test.names[0]);
            alert("here");
        }
    },
        "json");
}
getList();

私のhtmlファイルで実際に呼び出しているのは、デバッグ用のjavascriptファイルだけです。オブジェクトを返していることはわかっていますが、名前セクションにnull値が含まれるエラーが発生し、その理由がわかりません。私は何が欠けていますか?

私のPHPファイルは

{"names":["john doe","jane doe"],"ids":["123","223"]}

ここで終わっている ようですUncaught TypeError: Cannot read property '0' of undefined ので、sub0が私を殺しています。

4

4 に答える 4

5

jQueryが提供するファサードを使用する可能性があり$.getJSONます。これにより、標準のJSONリクエストに必要なすべてのajaxパラメーターが設定されます。

$.getJSON('test.php', function(response) {
    alert(response.names[0]);   // john doe
}); 

ただし、問題の原因は1)サーバーが正しい応答コードや正しいヘッダー(つまり、JSONデータ)を返さない可能性があることだと思います-ただし、少なくとも後者の場合は、上記の方法でこの結論を強制する必要があります。

参照:http ://api.jquery.com/jQuery.getJSON

于 2012-04-08T08:56:29.423 に答える
3

問題は、成功コールバックの代わりに完全なコールバックを使用していることのようです。

function getList(){
    $.ajax({  
        type: "GET", 
        url: 'test.php', 
        data: "",  
        success: function(data) { /* success callback */
            var test = jQuery.parseJSON(data);
            alert(test.names[0]);
            alert("here");
        }
    },
    "json");
}
getList();

jQuery AJAX Docsから:

success(data、textStatus、jqXHR)

リクエストが成功した場合に呼び出される関数。関数には3つの引数が渡されます。サーバーから返されるデータ。dataTypeパラメーターに従ってフォーマットされます。ステータスを説明する文字列。およびjqXHR(jQuery 1.4.xではXMLHttpRequest)オブジェクト。jQuery 1.5以降、成功設定は関数の配列を受け入れることができます。各関数は順番に呼び出されます。これはAjaxイベントです。

complete(jqXHR、textStatus)

リクエストが終了したときに呼び出される関数(成功およびエラーのコールバックが実行された後)。関数には2つの引数が渡されます。jqXHR(jQuery 1.4.xではXMLHTTPRequest)オブジェクトと、リクエストのステータス( "success"、 "notmodified"、 "error"、 "timeout"、 "abort"、または「parsererror」)。jQuery 1.5以降、完全な設定で関数の配列を受け入れることができます。各関数は順番に呼び出されます。これはAjaxイベントです。

于 2012-04-08T07:46:34.697 に答える
2

jQueryは、応答として期待されるデータの種類を知りたいと考えています。そうでない場合、jQueryはそれを解析する方法を知りません。

dataType = 'json'したがって、ここで前に述べたように、属性を使用してjQueryに指示します。

function getList() {
    $.ajax({  
        type: "GET", 
        url: 'test.php', 
        data: "",  
        dataType: "json",
        success: function(data) { 
            console.log(data);
        }
    });
}

これに加えて、PHPにそのコンテンツをhtmlではなくjsonとして表示させることをお勧めします。header('Content-type: application/json');PHPスクリプトの出力の前に設定することで、このヘッダーを使用します。それで:

$names = array('john doe', 'jane doe');
$ids = array('123', '223');

$data['names'] = $names;
$data['ids'] = $ids;

header('Content-type: application/json');

echo json_encode($data);
于 2012-04-08T07:49:48.600 に答える
1

ajax()関数のすべてのパラメーターを単一のオブジェクトに渡す必要があります。したがって、「dataType」オプションが必要です。また、データ型を明示的に設定すると、jQueryがJSONデータを解析します。完全なコールバックは、解析されたJavaScriptオブジェクトをパラメーターとして受け取ります。

function getList() {
    $.ajax({  
        type: "GET", 
        url: 'test.php', 
        data: "",  
        dataType: "json",
        success: function(test) { 
            alert(test.names[0]);
            alert("here");
        }
    });
}
于 2012-04-08T07:45:23.453 に答える