0

HTML要素のコンテンツをJSONオブジェクトプロパティに置き換えるのに問題があります。これが私のコードです:

url  = '/blah/blah-blah';
data = $.getJSON(url);
$(this).parent('.status').replaceWith(data.content);

これで、正しいJSONオブジェクトが返され、「content」と呼ばれる適切にフォーマットされたプロパティが含まれていることがわかりました。(私はそれをコンソールに表示しています)。第二に、私は置き換える正しい要素を選択していることを知っています。(「ビンゴ!」に置き換えるdata.contentと、画面にテキストが表示されます。)

ただし、上記のコードを実行すると、要素のコンテンツが何も置き換えられていないことがわかります。私は何が間違っているのですか?

に置き換えdata.contentてみましdata.responseJSON.contentたが、役に立たなかったことに注意してください。

ありがとう!

4

3 に答える 3

4

コールバックを使用する必要があります、

  url  = '/blah/blah-blah';
  $.getJSON(url, function(data) {
    $("some selector").parent('.status').replaceWith(data.content);
  })

あなたの例では、$。getJSONは意味のあるものを何も返しません-おそらく「未定義」だけです。その間、それはあなたの要求をします。getJSONが成功すると、結果はそれを処理する処理関数に渡されます。コールバックを提供しない場合、サーバーから応答を受け取っても何も起こりません。

または、新しいセレクターを使用したくない場合は、$(this)を節約できます。

  url  = '/blah/blah-blah';
  item = $(this)
  $.getJSON(url, function(data) {
    item.parent('.status').replaceWith(data.content);
  })
于 2013-03-06T01:09:42.463 に答える
1

.getJSON(url)呼び出しが完了する前にコードが実行されています。次のように成功ハンドラーを指定してみてください。

$.getJSON(url, function(data) {
    $(this).parent('.status').replaceWith(data.content);
});
于 2013-03-06T01:16:36.587 に答える
1

AJAX呼び出しは非同期であるため、使用しようとしたときにコンテンツがまだ到着していません。それをコンソールに表示するとき、応答がすぐに到着しないことを確認するのに十分な速さでそれを行うことはできません。

呼び出しでコールバックを使用してgetJSON、データが到着したときにデータを処理します。

url = '/blah/blah-blah';
$.getJSON(url, function(data) {
  $(this).parent('.status').replaceWith(data.content);
});
于 2013-03-06T01:11:55.150 に答える