0

次のjsonからデータを正しく返す方法を知りたい: http://test.com/tesdataというURLがあり、次のデータが得られるふりをする:

[{"Identifier":1, "Name":"Test"},
 {"Identifier":2, "Name":"Test"},
 {"Identifier":3, "Name":"Test"}]

したがって、このデータをdivで取得するために次のことを行いました。

                $.ajax({ 
    type: 'GET', 
    url: 'http://notgiven', 
    data: { get_param: 'value' }, 
    dataType: 'json',
    success: function (data) { 
        alert("s");
        $.each(data, function(index, element) {
            $('.result').append("a");
        });
    },
    error: function(jqXHR, textStatus, errorThrown){
        alert("jqXHR: " + JSON.stringify(jqXHR));
        alert("textStatus: " + JSON.stringify(textStatus));
        alert("errorThrown: " + JSON.stringify(errorThrown));
    }
});

そして、次のエラーが表示されますJson文字列を解析できません

4

3 に答える 3

1

これを試して:

// create empty object
var json = {};

$.each(data, function(index, element) {
 // for each element, create empty object 
 json[index] = {};
 // map response data to new json object
 json[index]['id'] = element.Identifier;
 json[index]['name'] = element.Name;
});

json変数には、javascript オブジェクトに便利に保存された json 形式のすべての情報が含まれるようになりました:)

ここに画像の説明を入力

あなたの例では、これは次のことを意味します。

$.ajax({ 
  type: 'GET', 
  url: 'http://test.com/tesdata', 
  data: { get_param: 'value' }, 
  dataType: 'json',
  success: function (data) { 

       var json = {};

       $.each(data, function(index, element) {
         json[index] = {};
         json[index]['id'] = element.Identifier;
         json[index]['name'] = element.Name;
         // don't know exactly what you try to do here, but let's append this data to '.result'
        $('.result').append("<span id='" + element.Identifier + "'>" + element.Name + "</span>"); 

       });   

  }
});

この値をいくつかの div に追加することだけが必要な場合は、json 変換全体を行う必要はないことに注意してください。この場合、あなたはただすることができます

 success: function (data) { 
               $.each(data, function(index, element) {
                $('.result').append("<span id='" + element.Identifier + "'>" + element.Name + "</span>"); 

  }); 

}

于 2012-08-13T14:43:16.343 に答える
0

コメントで提案したように、これはおそらくクロスオリジンの問題です。同じプロトコル(http / https)、同じドメイン(mydomain.com)、同じポートを意味する異なるオリジンからデータ/スクリプトにアクセスすることはできません(通常は省略されたデフォルトは:80)

So origin of: http://localhost:8080/data != https://localhost:8080/data
   origin of: http://mydomain.org/data   != http://localhost/data
   origin of: http://mydomain.org/data   != http://localhost/data
   origin of: http://localhost/data      == http://local

ホスト/何か他

それでも100%確信はありません。ただし、問題を解決するための最初のステップは、適切なデバッグです。

xcodeを使用してデバッグすることは可能ですが、それ なしで試してみたい場合。エラーハンドラを定義します。(このフィドルを確認してください

クロスオリジンの問題が原因で機能していないことがわかります。(およびそのダミーURL)残念ながら、これらのクロスオリジンエラーをキャプチャすることはできません。あなたはコンソールでそれらを見ることができるだけです..(少なくとも私はまだ見ることができませんでした)

しかし、今は良いニュースです!

PhoneGapアプリは、クロスオリジンポリシーに限定されません。したがって、デプロイされた場合、問題は解決されるはずです。

バックエンドにアクセスできる場合は、これも簡単に修正できます。CORS(クロスオリジンリソースシェアリング)を有効にするには、Access-Control-Allow-Origin: *ヘッダーを設定する必要があります

注:開発の場合、これは問題にはなりません。本番の場合は、固定URLを設定するか、必要がない場合は削除することをお勧めします。

編集: つまり、クロスオリジンの問題ではありません。エラーのとおり:Json文字列を解析できません

したがって、jqXHR応答の内容を確認します。生データを見て、それが有効かどうかを確認します。私の最善の策はjqueryjson-parserがかなりしっかりしているからではない可能性が95%あります。

于 2012-08-13T15:23:07.787 に答える
-1

js を使用して json データを操作する前に、JSON.parse 関数を呼び出す必要があります。

$.ajax({ 
        type: 'GET', 
        url: 'http://test.com/tesdata', 
        data: { get_param: 'value' }, 
        dataType: 'json',
        success: function (data) { 
            var items = JSON.parse(data);
            $.each(items, function(index, element) {
                $('.result').append(element.Id + " " + element.Name);
            });
        }
        });

IE 6 および 7 では、JSON.parse 関数をサポートするために json2.js ファイルを含める必要があります。

于 2012-08-13T12:34:41.013 に答える