2012-01-06 1 views
0

を確認することができ、私はしばらくの間、グーグルの後、私はこの私はjsonを解析したいが失敗する。いずれかの私のコード

$(document).ready(function(){ 
    var output = $('#output'); 

    $.ajax({ 

     url: 'http://xxxx.com/android_sha/index.php', 
     dataType: 'jsonp', 
     jsonp: 'jsoncallback', 
     timeout: 5000, 
     success: function(data, status){ 
      $.each(data, function(i,item){ 
       var landmark = '<h1>'+item.sha_id+'</h1>' 
       + item.sha_id+'</p>'; 

       output.append(landmark); 
      }); 
     }, 
     error: function(){ 
      output.text('There was an error loading the data.'); 
       alert("error");   
     } 
    }); 
}); 
を得た。..今、私はこのうち各変数を抽出するデータベースから

[{"sha_id":"2","sha_text":"This is 1st sha."},{"sha_id":"4","sha_text":"this is 2nd sha"}] 

これを印刷するPHPページを作成しました

しかし、私には常に警告エラーが表示されます。私は$.each(data, function(i,item){で何かが間違っている可能性がありますが、正しい形式でなければならないことを理解できません。

+1

'alert(" error ");'が実行された場合、 'success'コールバックが実行されなかったことを意味します。サーバーはJSONPを正しく出力しますか? JSONPは、JSONを関数にラップする必要があることを忘れないでください。 –

+0

jsonの初心者として、私はサーバーがJSONPを正しく出力しているかどうかはわかりません。私はこのチュートリアルhttp://samcroft.co.uk/2011/updated-loading-data-in-phonegap-using-jquery-1-5/に従っているだけで、ソースコードを見てからjsonコードが返すものは何ですか。 (1行に整形されています)PHPコードを使用してjson outを作成するにはこれらのwhile($ row = mysql_fetch_assoc($ result)){ \t $ records [] = $ row; } echo json_encode($ records); – cjmling

+0

JSONPは*実際には* JSONではありません。 JSONPはクロスドメインデータを取得するための「ハック」です。 JSONPは実際にはJavaScriptファイルです。 'callback([{a:1、b:2}、{c:3、d:4}])'のような関数呼び出しを含むべきです。 'callback'は' jsoncallback'パラメータの値に置き換えてください。 –

答えて

0

ではありません。実際には JSONです。 JSONPはクロスドメインデータを取得するための「ハック」です。 JSONPは実際にはJavaScriptファイルです。

JSONを関数呼び出しでラップする必要があります。あなたの例では、jsoncallbackコールバックを送信しているので、その値にJSONをラップする必要があります。

$callback = $_GET['jsoncallback']; 
while($row = mysql_fetch_assoc($result)){ 
    $records[] = $row; 
} 
echo $callback . '(' . json_encode($records) . ');'; 
+0

ありがとうございます。 JSONとJSONPの間の明確な理解が問題を引き起こします。 – cjmling

+0

ようこそ。 JSONPは少し奇妙なことがあります。私はそれを「ハック」と考えています。私は助けてくれるとうれしいです:-) –

+0

@cjmling問題を解決した場合、正しい答えとしてロケットの答えを選択してください。 –

3

アラート(「エラー」)が発生した場合、$ .each関数が失敗したことを意味するわけではありません。つまり、jQueryが指定されたURLをロードできなかったか、ajaxリクエストに別の問題があります。これによりエラー機能が起動され、エラーメッセージが警告されます。

Chromeのデベロッパーツールを使用してネットワークトラフィックを確認するなど、リクエストが正しく機能していることを確認します。ページが200以外のステータスコードを返した場合、それが成功関数がトリガしていない理由です。

+0

も応答が有効なjsonpレスポンスであることを確認してください – Ericson578

+0

クロム開発ツールのネットワークステータスは200 OKです。 – cjmling

+0

@ Ericson578:どうすればそれが有効なjasonpレスポンスであることを確認できますか? ..ジェイソンの応答は、私が質問に入れたものとまったく同じです。ブラウザ内でページのソースコードを表示した後で、それらはすべて1行で表示されます。 – cjmling

関連する問題