2017-12-07 17 views
0

Ajaxで成功すると、次のデータがカウント変数に格納されます。 (AJAX呼び出しの成功の抜粋)使用:ajax呼び出しによって取得されたオブジェクトのアクセス権のプロパティ

success: function (count) { 
      console.log(count); 
     } 

とはconsole.log以下(カウント)をブラウザのコンソールに示すように、このデータを保持する:

{ 
    '07/12/2017': { 
     'day': {'failed': 0, 'success': 3}, 
     'night': {'failed': 0, 'success': 0} 
    }, 
    '06/12/2017': { 
     'day': {'failed': 2, 'success': 20}, 
     'night': {'failed': 1, 'success': 291} 
    }, 
    '05/12/2017': { 
     'day': {'failed': 6, 'success': 50}, 
     'night': {'failed': 1, 'success': 51} 
    } 
} 

私の問題は、私がデータにアクセスしようとすると、(私は変数date = '07/12/2017 'を持っていると私は[日付]私は未定義を取得しますが、私は手動でコピーし、以下のようにカウントするデータをハードコードする場合はカウント[日付]は対応する日付の中にオブジェクトを返します:

count = { 
     '07/12/2017': { 
      'day': {'failed': 0, 'success': 3}, 
      'night': {'failed': 0, 'success': 0} 
     }, 
     '06/12/2017': { 
      'day': {'failed': 2, 'success': 20}, 
      'night': {'failed': 1, 'success': 291} 
     }, 
     '05/12/2017': { 
      'day': {'failed': 6, 'success': 50}, 
      'night': {'failed': 1, 'success': 51} 
     } 
    } 

シンプルだけど、今は完全に私を逃げているかもしれません。問題のコメントで証拠から、事前

+1

*「私の問題はときに私データにアクセスしようとすると(私はajaxの成功関数内のすべて)、私は可変日付= '07/12/2017 'と私は[日付]私は未定義取得 "*カウント' *本当に*そのデータを保持するhttps://jsfiddle.net/dne4huug/デバッガを使用して、 'success'ハンドラの最初の行にブレークポイントを設定し、' count' *に実際に何が含まれているかを確認してください。 –

+2

おそらく 'count'をプレーンストリングとして受け取ります。それを処理する前に 'JSON.parse(count)'を行います。 – dferenc

+1

あなたは*あなたが* [count [date] 'にアクセスしようとしたところで*あなたはこの問題に遭遇するかもしれません(http://stackoverflow.com/questions/14220321/how-do-i-)非同期呼び出しからの応答を返す)、私は確信が持てません。 –

答えて

1

おかげで、私はcountは、文字列が含まれていと思います。あなたが示したことは無効なJSONであり、私が今までに見たコンソールがどのようにオブジェクトを表しているのかは、console.logであるため、文字列であると思われます。

もしそうなら、サーバーは無効なJSONを送信しています。プロパティ名(および他のすべての文字列)は、ダブルの引用符でなければならず、一重引用符でなければなりません。

だから、解決策は以下のとおりです。

  1. は、サーバの出力を修正してください。 JSONを出力する最良の方法は、手作業でではなくですが、代わりにオブジェクトグラフを作成し、サーバー側環境のJSON.stringifyに相当するものを使用してください。

  2. あなたはまだ正しく、それはこのヘッダを送信することによって、あなたがJSONとして送り返しているものを識別するために、サーバーのコードを更新し、その時点で文字列を受信して​​いる場合:

    Content-Type: application/json 
    

    jQueryのことが表示されますレスポンスにコンテンツタイプを追加し、自動的に文字列を解析します。

その後、countdateが文字列07/12/2017が動作するあるcount[date]を使用してオブジェクトグラフ、およびあなたのコードを参照します。

はここで、それは私達が私達に戻って何かをエコーするためにサーバに伝えることができますjsFiddleの便利な「エコー」機能を使用してjsFiddleに取り組んでいる:https://jsfiddle.net/narxfmdm/ここでフィドルのコードです:

var json = '{' + 
' "07/12/2017": {' + 
'  "day": {"failed": 0, "success": 3}, ' + 
'  "night": {"failed": 0, "success": 0}' + 
' }, ' + 
' "06/12/2017": {' + 
'  "day": {"failed": 2, "success": 20}, ' + 
'  "night": {"failed": 1, "success": 291}' + 
' }, ' + 
' "05/12/2017": {' + 
'  "day": {"failed": 6, "success": 50}, ' + 
'  "night": {"failed": 1, "success": 51}' + 
' }' + 
'}'; 
$.ajax({ 
    type: "POST", 
    url: "/echo/json/", 
    data: {json: json, delay: 1}, 
    success: function(count) { 
    var date = "07/12/2017"; 
    $("<p>").text("Data for " + date + ": " + JSON.stringify(count[date])).appendTo(document.body); 
    } 
}); 
+0

これは私が問題を把握するのを助けました:)あなたは100%正しいです。それは、サーバーが、私のpythonスクリプトに 'Content-Type:application/json'ヘッダーが含まれているように、jQueryが可能な限り解析していると仮定した文字列を返すことでした。 JSON。 DataAsObject = JSON.parse(dataAsStringSwapQuotes); 'DataAsObjectは、必要なすべてのプロパティにアクセスできます。ありがとうございました –

+1

@AlejandroSuarez:はい幸いなことに、Pythonスクリプトが構造体を構築するために更新されてから、 'json.dumps'を使用すると、本当にうまくいくでしょう。 –

+0

カウダー:実際に面白いですね、私はjson.dumpsを使っています:)...おそらく、実際のJSONの代わりにデータを格納するPythonモジュールのshelveを使用していますあなたが知っていることを知っている人... –

関連する問題