2010-12-12 6 views
6

jQuery 1.4.2を使用してajaxアプリケーションを作成しています。get()、post()メソッド、ajax()メソッドを使用して試してみました。私のPHPサービスが返す:私はjson.statusとJSONとしてアクセスしようとした私の成功コールバックでjqueryからjsonデータにアクセスする

[{"k":"label0","v":0.5},{"k":"label1","v":99.43},{"k":"label2","v":2.46},{"k":"label3","v":46.29},{"status":"OK"}] 

[0] [0] が、それは常に "未定義" を返します。私は何を間違えているのですか?

function getSysinfo(source) { 
    var json = null; 
    $.ajax({ 
     url: source, 
     type: 'POST', 
     dataType: 'json', 
     success: function (data) { 
      json = eval("(" + data + ")"); 
      $('#data').html(json.status); 
      alert(json[0][0]); 
      refreshChart(json); 
     }, 
     error: function (request, status, error) { 
      alert("REQUEST:\t" + request + "\nSTATUS:\t" + status + 
        "\nERROR:\t" + error); 
     } 
    }); 
    return json; 
} 

私はこれを数日間検索しています。どのように私は返されたデータにアクセスするのですか?どんな助けもありがとう。あなたの成功コールバックの試みを

+0

、方法はgetJSONようavailbe既に存在しているの世話をとりますすべての問題、そしてちょうど – kobe

答えて

6

あなたが必要となるというステータス値にアクセスするには:

data[4].status 

それは5番目の要素に格納されているオブジェクトであるため、これは私はこのような、より便利なものにサーバー応答を変更することを検討します配列内では、statusはオブジェクトのプロパティです。この例では見ることができるよう

+0

ahh - もう少し意味があります...私は本当にstatus要素についてはあまり気にしませんでした。私はk/vペアが必要でした。私は実際に実験していました...そして、私はdata [1] .vとdata [1] [1]が同義であると考えていました。高すぎる。 – WWWIZARDS

5

var parsed = $.parseJSON(data); 
$.each(parsed, function (i, jsondata) { 
    alert(jsondata.k); 
    alert(jsondata.v); 
}); 
+0

@ lorezoをループすることができます、我々はすべての要素を右にループする必要がありますか? .kと.vは何を与えるのですか? – kobe

+0

@gov:あなたは正しい!私はループ部分を見逃してしまった。これを反映する答えを編集しました – Lorenzo

+0

このようにjsonを解析する必要はありません.jQueryはすでに解析しています。 – andynormancx

4

あなたはeval("("+data+")");は必要ありません。

「JSON」:jQueryが自動的にデータ型のjQueryのドキュメントからdataType:'json'

を指定したので、あなたのためのJSON応答を解析しているJSONとしてレスポンスを評価し、JavaScriptオブジェクトを返します。 jQuery 1.4では、JSONデータは厳密に解析されます。不正なJSONが拒否され、解析エラーがスローされます。 (適切なJSONフォーマットの詳細については、json.orgを参照してくださいません。)

+1

NO。悪い。 'JSON.parse()' JSONに 'eval'を使わないでください。悪い。 – mattbasta

+2

私はevalの使用を主張していません。私は単に彼がそれを必要としないと言っています。また、JSON.parseはすべてのブラウザ(特に古いもの)でサポートされていません。 $ .parseJSONのようなものを使って、ブラウザに基づいて情報に基づいた決定を下すほうがおそらく良いでしょう。 – nategood

+0

私はeval()の部分に同意しました。私はちょうどボンネットの下で何が起こっていたのか分かりませんでした。私が検索していたもののいくつかは、数年前からだった。私はjQuery 1.4が組み込まれているので、ストリームがtype = 'text'の場合にのみ必要なので、parseJSON()をもっと見ていきます。 – WWWIZARDS

2

evalを使用する必要が任意のより

$.getJSON(url+query,function(json){ 
      $.each(json,function(i,value){ 

      }); 
     }); 
+0

それは必要ではありません、質問のコードはすでに完全に幸せにjsonを解析するでしょう。また、$ .getJSONは、POSTではなく、GETリクエストでのみ使用できます。 – andynormancx

+0

ええ私はPOST&ajax()が必要なので、オプションの柔軟性が増します。返信をありがとう、しかし... – WWWIZARDS

0

nategoodがすでに「ドンと書いたJSONのためのより多くのことができたコードの下に使用しますデータで何かをする必要はありません。それはすでにオブジェクトです。

この場合、それはあなたが状況にアクセスしたい場合、あなたはデータアレイ(それはあなたがこの配列でそれを見つけるところだ)の最後の項目からそれを取得する必要があり、配列です:

data[data.length-1].status 

JSONの別の構造について考える必要があるかもしれませんが、それは非常に快適に見えません。そのような

何か:

{ 
"items":[ 
     {"k":"label0","v":0.5}, 
     {"k":"label1","v":99.43}, 
     {"k":"label2","v":2.46}, 
     {"k":"label3","v":46.29} 
     ], 
"status":"OK" 
} 

...あなたは、単に代わりに、最初のあなたがエラー - であるかもしれないもの(応答内のそれを見つけることがどこ探しのdata.statusにアクセスできるため、取り扱いが容易でなければなりません傾向がある)。

+0

私は状態について多くは気にしませんでしたが、k/vペア...私は応答が解析を引き起こすために必要と思われるかもしれません。私はそれをあなたの構造に似たものにしようとしていましたが、誤ってarray_push($ jsonData、array( "status" => "OK")); - PHP側です。いずれにしても、配列に正しくアクセスするための命名法が必要でした... – WWWIZARDS

+0

私はあなたの助けに感謝します。 – WWWIZARDS

7

あなたのJSONデータは、次のようになります。

[ 
    { 
     "k": "label0", 
     "v": 0.5 
    }, 
    { 
     "k": "label1", 
     "v": 99.43 
    }, 
    { 
     "k": "label2", 
     "v": 2.46 
    }, 
    { 
     "k": "label3", 
     "v": 46.29 
    }, 
    { 
     "status": "OK" 
    } 
] 

あなたは魔法の数やlength-1よう4

json[4].status 

を使って自分のステータスを読んでする必要があります - 望ましくありません。

{ 
    "status": "OK", 
    "entries": [ ... ] // add your data here 
} 
0

データパラメータをデコードJSONです:私はあなたのケースで使用することができ、いくつかの答えを与えた

http://www.jsfiddle.net/rLprV/1/

関連する問題