1

AJAX 呼び出しからの HTML 応答を自分のページに挿入していますが、それらの要素が作成された後にそれらの要素にアクセスしようとすると、失敗します..

これは、HTMLを取得して挿入する方法です:

$.ajax({url: 'output.aspx',
   data: 'id=5', 
   type: 'get', 
   datatype: 'html',
   success: function(outData) {$('#my_container').html(outData);} 
})

<div>(id = )に挿入される結果の HTML はmy_container次のようになります。

<div id="my_container">
   <ul>
      <li id="578" class="notselected">milk</li>
      <li id="579" class="notselected">ice cream</li>
      <li id="580" class="selected">chewing gum</li>
   </ul>
</div>

...その後、次のようなクエリを使用して要素にアクセスしようとすると <li>、 何も選択されません。$('#my_container li:first')$('#my_container ul:first-child')

Listen プラグインを使用して、要素のクリック イベントを検出していますが、<li>機能します...しかし、div に出力 HTML が設定されているかどうかを検出し、それに応じて<li>のクラスの1 つを変更する方法がわかりませんでした。 ...

$(document).readyどちらも機能しません...

2番目のcssスタイルを変更する必要があると想像してください<li>..これに対する解決策は何ですか?

4

4 に答える 4

3

AJAX 呼び出しが完了したかどうかをどのように確認していますか? $.ajax(…)非同期であるため、もちろん、呼び出しの直後に実行されるコードで要素を使用することはできません。

関数内またはそこから呼び出される他のコード内からこれらの要素を操作してみてくださいsuccess。その時点で、コンテンツが利用可能であることがわかります。

于 2009-01-05T23:55:04.287 に答える
0

まず、次のコードを試してください (元の AJAX 呼び出しの代わりに):

var html = $.ajax({url: 'output.aspx',
   data: 'id=5', 
   type: 'get', 
   datatype: 'html',
   async: false
}).responseText;
$('#my_container').html(html);

それが機能する場合、li:firstセレクターは AJAX リクエストが終了する前に呼び出されています。それでもうまくいかない場合は、次のコードを試してください。

$.ajax({url: 'output.aspx',
   data: 'id=5', 
   type: 'get', 
   datatype: 'html',
   success: function(outData) { $('#my_container').html(outData); }, 
   error: function(errorMsg) { alert('Error occured: ' + errorMsg); }
});

これにより、リクエストが失敗した場合にエラー メッセージがポップアップ表示されます。エラー メッセージとともにエラー メッセージが表示される場合、リクエストは返されていません。

于 2009-01-06T00:03:58.637 に答える
0

実際のリクエストが成功したと確信していますか? 何も選択されていない場合、おそらく最初に #my_container に実際に何も挿入されていないことが原因である可能性があります。

于 2009-01-05T23:50:03.533 に答える
0

現在の ajax 呼び出しが非同期であるため、作成される前にこれらの要素にアクセスしようとしているようです。 「async=false」オプションを ajax に追加してみてください。

于 2015-10-06T17:23:39.913 に答える