-1

私のコードでは:

   $.ajax({
       url: 'http://chapters.zmgc.net',
       dataType: 'jsonp',
      success: function(d){   // "Type","Name","Link","Contact","Location","Icon"
        Tabzilla.zgContacts = d;
        var countries = [];
        d.rows.forEach(function(row){
          if (row[0] == 'Country') countries.push(
            {link:row[2], contact:row[3], country: row[4]}
          );     
        });

しかし、エラーが発生します。UncaughtSyntaxError:予期しないトークン:

{
 "kind": "fusiontables#sqlresponse",
....

URLを実際のファイルに置き換えてdataTypeを削除すると、すべて期待どおりに機能します。

http://jsonlint.com/でhttp://chapters.zmgc.netの出力を検証しましたが、問題ありません。

http://chapters.zmgc.netから返された応答ヘッダーを見ると、次のようになっています。

Connection:keep-alive
Content-Type:application/json
Date:Thu, 13 Dec 2012 17:02:27 GMT
Transfer-Encoding:chunked

ここにコードがありますhttps://github.com/tomarcafe/Z-Tabzilla/blob/gh-pages/z-tabzilla.js#L282ローカルファイルをリモートデータの読み取りに置き換えたいですか?

私は何が欠けていますか?

4

3 に答える 3

2

typeをjsonpに設定しないでください。つまり、応答が関数呼び出し内にラップされていると想定されるため、パディング付きのJSONです。

callback({payload: values});

実行しようとします。

代わりに、type:jsonを使用するか$.getJSON、JSONペイロードを。で正しく渡すだけ$.parseJSONです。

于 2012-12-13T17:13:43.897 に答える
1

これは、JSONP(パディング付きのJSON)を要求し、パディングなしでJSONを取得しているためです。JSONPは関数呼び出しによって埋め込まれるJSONであり、それを機能させる唯一の方法は、サーバーでJSONPのサポートを追加することです。

アクセスできないchapters.zmgc.net場合は、連絡してJSONPのサポートを追加するように依頼する必要があります。

アクセス権がある場合は?callback=parseThis、URLに追加してから、サーバー側でその変数を読み取り、それに応じてJSONを埋めることができます。

parseThis(/* put your json in here */);

ただし、独自のコールバックを定義しない場合、jQueryは使用可能なコールバックを自動的に追加します。それらは次のようになります。jQuery18200710562220774591_1355419375476

于 2012-12-13T17:10:06.533 に答える
0

Ajaxはjsonp(パディング付きのjson)を使用しますが、URLはjsonpと互換性がないように思われるため、使用を避ける必要があります。

jQueryから:

"jsonp":JSONPを使用してJSONブロックにロードします。余分な「?callback =?」を追加します URLの最後にコールバックを指定します。キャッシュオプションがtrueに設定されていない限り、URLにクエリ文字列パラメータ「_=[TIMESTAMP]」を追加してキャッシュを無効にします。

詳細はこちら: http: //bob.ippoli.to/archives/2005/12/05/remote-json-jsonp/

于 2012-12-13T17:18:37.790 に答える