1

私は文字通りこれを丸一日デバッグしようとしてきましたが、まったく当惑しています。いくつかのヒントを探しています。

私はこれらの関数をjavascript名前空間内に持っています:

var ZZ = {
  bar: function(data) {
    console.log(data);
  },
  foo: function() {
    $.ajax({
      'url':'/test',
      'type':'GET',
      'dataType':'jsonp',
      'success':function(ret_json, status) {
        console.log(ret_json);   // SUCCESS_1
        console.log(ret_json[1].title);   //SUCCESS_2
        bar(ret_json);
      }
    });
  },
...
}

だから私は開発者ツールの「ネット」タブを見て、返されたjsonは正しい..のようなもの:

[{'id':1, 'url':'http://a.com', 'title':'hi'}, {'id':2, 'url':'http://b.com', 'title':'hi2'}]

コンソールを見ると、SUCCESS_1 で次のような出力が表示されることがわかります。

[{'id':1, 'url':'http://c.com', 'title':'hi3'}, {'id':2, 'url':'http://c.com', 'title':'hi3'}]

ご覧のとおり、id は正しいのですが、url と title は正しくありません。(データベース内の ID を変更することもでき、それらは正しく実行されます)

SUCCESS_2 の次の行では、正しいタイトルが取得されます。'hi2'

次に、success 関数にデバッガー ステートメントを挿入します。

次に追加します:

var hi = {};
console.log(hi);

成功関数に..出力されます..(冗談ではありません)

{'url':'http://c.com', 'title':'hi3'}

基本的に、この「デフォルト」は実際にあったものを上書きします。

cache:false を ajax 呼び出しに追加しました。json と jsonp を試しました。キャッシュをクリアしてみました。chrome/safari/firefox を使用してみました。 .. それは jsut 本当に本当に effeded です。

私が試すことができる他のアイデアはありますか?


UPDATE : この名前空間を別の HTML ページに追加します。~の最もひどい例

var hi = {}
console.log(hi)

印刷物はなくなりましたが、ret_json のデータが間違っているという元の問題はまだ存在しています。(以前の HTML ページの作業バージョンにはまだアクセスできません)

4

2 に答える 2

2

@ggez44、これは、console.log が Chrome/Firefox/Safari で同期された呼び出しではないためです。通常、数ミリ秒の遅延があります。

私のマシンでは、遅延は一定ではなく、Chrome では 4 ミリ秒から 16 ミリ秒、Safari では約 2 ミリ秒です。

http://techblog.appnexus.com/2011/webkit-chrome-safari-console-log-bug/

Chrome デベロッパー ツールでの console.log の異常な動作

これに対する私の投機的な解決策は、「console.log(a.toJSON());」のようなことをすることです。次に、渡された文字列オブジェクトへのポインターになりますが、これは元のオブジェクトに関連付けられていません。

更新: どうやらこれは「バグではなく機能」です。Webkit メーリング リストのチケットへの適切なリンクがいくつかあります。 javascript オブジェクトが Chrome、Firefox、Safari のコンソールで異なる値を表示するのはなぜですか?

于 2012-06-25T22:05:18.933 に答える
1

コードのどこかに、次を追加しましたか?

Object.prototype.url = "http://c.com";
Object.prototype.title = "hi3";

これが、空のオブジェクトを作成したときにこれらのプロパティが表示される唯一の理由です。

于 2012-06-25T19:29:17.273 に答える