0

jQuery関数スクリプトにJSON配列を返していますが、構文を正しく取得できないようです-ここで約12の異なる例を読んだ後でも。

jQuery ajax関数の呼び出しは次のとおりです。

$.ajax({
    url: "fetchAlleles.php",
    datatype: 'json',
    data: {'mndx': mndx, 'sndx': sndx },
    success: function(rtnval) {
      alert("success: allele_1="+rtnval['allele_1']+", allele_2="+rtnval['allele_2']);
      //alert(rtnval);
    },
    error: function() { alert('Error!'); }
    });

値を返す PHP コードは次のとおりです。

echo "{";
echo "allele_1: ", json_encode($ary[0]), "\n";
echo "allele_2: ", json_encode($ary[1]), "\n";
echo "run_date: ", json_encode($ary[2]), "\n";
echo "}";

アラートのデバッグ ステートメントを使用すると、返されているものが期待どおりであることがわかります。

{allele_1: "440"
allele_2: "480"
run_date: null
}

しかし、JSONオブジェクト内の値を読み取ろうとすると、「未定義」が返されます。

alert("success: allele_1="+rtnval['allele_1']+", allele_2="+rtnval['allele_2']);

また

alert("success: allele_1="+rtnval.allele_1+", allele_2="+rtnval.allele_2);

また

alert("success: allele_1="+rtnval['allele_1'][0]+", allele_2="+rtnval['allele_2'][0]);

誰かが助けてくれることを願っています-これは腹立たしいです! (JSON 構文がもっと明白であることを望みます!)

どうもありがとう、リクスター

4

7 に答える 7

3

あなたの JSON コンテンツは有効な JSON ではないようです - 次のようにフィールド名を引用符で囲む必要があります

{ "allele_1": "value", ... }
于 2012-10-12T20:59:56.037 に答える
2

あなたが作る場合datatype- >dataTypeあなたのjsonはjQueryによって解析されます。

$.ajax({
    url: "fetchAlleles.php",
    dataType: 'json',
    data: {'mndx': mndx, 'sndx': sndx },
    success: function(rtnval) {
      alert("success: allele_1="+rtnval['allele_1']+", allele_2="+rtnval['allele_2']);
      //alert(rtnval);
    },
    error: function() { alert('Error!'); }
});
于 2012-10-12T20:59:29.697 に答える
2

The PHP json output is invalid because it does not contain commas.

Change php output to:

echo json_encode(array(
    'allele_1' => $ary[0],
    'allele_2' => $ary[1],
    'run_date' => $ary[2]
));
于 2012-10-12T21:01:14.667 に答える
1

まず第一に、他の人が述べたように、あなたの JSON は有効ではありません。次のようになります。

{
"allele_1": "440",
"allele_2": "480",
"run_date": null
}

json がわからない場合は、jsonlintなどを使用してみてください。チェックしてくれます。

php で json_encode() を使用している方法も少し奇妙に思えます。すべてを単一の配列に入れ、配列全体を一度 json_encode する方が良いでしょう。次のようにphpで配列を構造化することにより、jsonの結果を再作成できます。

$json_output = array(
    'allele_1' => '440',
    'allele_2' => '480',
    'run_date' => null
);

echo $json_output;

最後に、$.ajax 応答にアクセスする方法が正しくありません。配列のようにデータにアクセスしていますが、それはオブジェクトです。

success: function(rtnval) {
    alert("success: allele_1="+rtnval.allele_1+", allele_2="+rtnval.allele_2);
}

そのようにしてみてください。

于 2012-10-12T21:21:16.557 に答える
1

jQuery.parseJSON を使用してこれを簡単にしますhttp://api.jquery.com/jQuery.parseJSON/

これが彼らの例です:

var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name ); //John
于 2012-10-12T20:59:29.467 に答える
1

この関数を使用JSON.parse(rtnVal)すると、最新のすべてのブラウザで使用でき、文字列を JSON に変換できます

于 2012-10-12T20:59:40.817 に答える
1

Ok so there are two things I want to suggest to you.

First of all. When you are returning your values from PHP back to JavaSctipt, you'll only need to perform one json_encode() command. Simply build your data in a regular PHP array (yes, it can be nested arrays).

Just execute one echo json_encode($data) at the end of your script.

Secondly, you'll want to access that data with JavaSctipt using dot syntax if you are dealing with an object. You can use the square brackets (key) syntax when dealing with an array.

  • { 'key1':'value1' }
    Here you would use data.key to get value1

  • { 'key1':[ 'array_value1', 'array_value2', ... ] }
    Here you would use data.key1[1] to get array_value2.

于 2012-10-12T21:01:22.773 に答える