.ajax()
を使用して、.find()
から返されたデータに_id="result"
_を持つdiv
要素を見つけようとしています。残念ながら、alert(result)
は_div#result
_を返しません。
ここに私のコードがあります:
_$.ajax({
url: url,
cache: false,
success: function(response) {
result = $(response).find("#result");
alert(response); // works as expected (returns all html)
alert(result); // returns [object Object]
}
});
_
具体的にあなたの質問に答えるために、それは正しく機能しているようです。 jQueryがfind("#result")
メソッドで返すものは_[object Object]
_を返すと言いました。 find
クエリに一致するjQuery要素を返します。
result.attr("id")
など、そのオブジェクトの属性を取得してみてください-result
を返す必要があります。
一般的に、この答えは_#result
_がトップレベル要素であるかどうかに依存します。
_#result
_が最上位要素である場合、
_<!-- #result as top level element -->
<div id="result">
<span>Text</span>
</div>
<div id="other-top-level-element"></div>
_
find()
は機能しません。代わりに、filter()
を使用します。
_var $result = $(response).filter('#result');
_
_#result
_が最上位要素でない場合、
_<!-- #result not as top level element -->
<div>
<div id="result">
<span>Text</span>
</div>
</div>
_
find()
は機能します:
_var $result = $(response).find('#result');
_
同様の問題を解決するために3時間を費やしました。これは私のために働いたものです。
_$.get
_応答から取得しようとした要素は、bodyタグの最初の子要素でした。何らかの理由で、この要素の周りにdivをラップすると、$(response).find('#nameofelement')
を介して取得できるようになりました。
なぜかはわかりませんが、取得可能な要素を体の最初の子にすることはできません...それは誰かに役立つかもしれません:)
これを試して:
result = $("#result", response);
btw alert
は物事をデバッグする大まかな方法です。console.log
これはあなたの答えです:
<div class="test">Hello</div>
<div class="one">World</div>
次のjQueryは機能しません。
$(data).find('div.test');
divはトップレベルの要素であり、データは要素ではなく文字列であるため、機能させるには.filterを使用する必要があります
$(data).filter('div.test');
パースHTMLでそれを行うことを忘れないでください。好む:
$.ajax({
url: url,
cache: false,
success: function(response) {
var parsed = $.parseHTML(response);
result = $(parsed).find("#result");
}
});
動作する必要があります:)
JQuery find()は、DOMオブジェクトをラップするjQueryオブジェクトを返しています。そのオブジェクトを操作して、divで必要なことを実行できる必要があります。
これは私のために働いた、あなただけの最後に.html()を置く必要があります-$(response).find( "#result")
この方法で任意のdivを検索し、その属性または必要なものを取得できます。
$(response).filter('#elementtobefindinresponse').attr("id");
または
$(response).filter('img#test').attr("src");
問題は、あなたのajaxresponseはstringを返すため、直接使用する場合$(response)戻りますJQUERY:Uncaught Error:構文エラー、コンソールの認識できない式。適切に使用するには、最初に $。parseHTML(response) と呼ばれるJQUERY組み込み関数を使用する必要があります。関数名が示すとおり、最初にhtmlオブジェクトとして文字列を解析する必要があります。あなたの場合はこのように:
$.ajax({
url: url,
cache: false,
success: function(response) {
var parsedResponse = $.parseHTML(response);
var result = $(parsedResponse).find("#result");
alert(response); // returns as string in console
alert(parsedResponse); // returns as object HTML in console
alert(result); // returns as object that has an id named result
}
});
try if($(response).filter( '#result')。length)//何かをする
#result
応答HTMLで?以下を試してください。 jQueryは、何も見つからない場合でも空のオブジェクトを返します。
alert(result.length);
dataType: "html"
をリクエストに追加する必要があります。返されたhtmlがhtmlであることがわからない場合、返されたhtmlのDOMを検索できないことは確かです。
次のコードを使用するだけです
var response= $(result);
$(response).find("#id/.class").html(); [or] $($(result)).find("#id/.class").html();
ajax呼び出しがJSON配列、サーバー側からのJSON文字列を返す場合、次の操作を開始する必要があります。
$("button#submit").click(function() {
$.ajax({
type: "POST",
url: "ajax_create_category",
data: $('form#create_cat_form').serialize(),
success: function(data)
{
if(data)
{
var jsonObj = JSON.parse(data);
if(jsonObj.status)
{
$("#message").html(jsonObj.msg);
}
}
}
});
});
JSONオブジェクトをJSオブジェクト(変数)に解析すると、データのインデックスを使用してデータを取得できます!これが皆さんの一部に役立つことを願っています! :)
$.ajax({
url: url,
cache: false,
success: function(response) {
$('.element').html(response);
}
});
< span class = "element" >
//response
< div id = "result" >
Not found
</div>
</span>
var result = $("#result:contains('Not found')").text();
console.log(result); // output: Not found
_dataType: "html"
_を指定します。
JQueryが要求されたデータタイプを推測しない場合(チェック: http://api.jquery.com/jQuery.ajax/ )。私の推測では、response
はString
ではなくDOMObject
でした。当然、DOMメソッドは文字列では機能しません。
Firebugを実行しない場合は、console.log("type of response: " + typeof response)
(またはalert("type of response:" + typeof response)
でテストできます)
アラートでコンテンツを表示するには:
alert( $(response).find("#result").html() );