检查AJAX请求结果中是否存在元素

时间:2011-03-17 21:30:47

标签: jquery ajax

下面的代码总是将$('.ErrorMessage', result).length返回为0.我不明白为什么。想法?

AJAX请求

            $.ajax({
                type: "POST",
                url: action,
                dataType: "html",
                data: serializedForm,
                success: function (result) {
                    if ($('.ErrorMessage', result).length > 0) {
                        $('#editSurveyModal').append(result);
                    }
                    else {
                       alert('fail');
                    }
                },
                error: function (request, status, error) {
                    alert('save fail');
                }
            });

'result'返回..(通过警报验证)

<div id="ErrorMessage" class="ErrorMessage">
    <div>
        Please correct the following errors before saving.
    </div>
    <div style="text-align: left">
        <ul>
           <li>Test</li>
        </ul>
    </div>
</div>

我想做什么

我试图通过在结果中的某处检查ErrorMessage类来查看结果是否是上面的错误部分视图。

4 个答案:

答案 0 :(得分:2)

您可以使用jQuery首先从结果中实例化DOM元素(将它们添加到容器中),然后检查:

$('.ErrorMessage', $("<div/>").html(result)).length

答案 1 :(得分:2)

我曾经自己处理过同样的问题。

您不能.find()它,因为您要查找的元素位于集合的根级别。
(请注意,$(selector, result);$(result).find(selector);)的简写语法

但是,.filter('.ErrorMessage')会匹配它,就好了。

(顺便提一下,当您将整个HTML文档传递到jQuery()函数时会遇到同样的问题 - 然后<html><head><body>元素被剥离程。)

你应该做什么(抓住大多数/所有边缘案例)如下:

if ( $( '.ErrorMessage', $('<div/>').html( result ) ).length > 0 )
...

......鲍勃是你的叔叔。 : - )

答案 2 :(得分:1)

您可以直接处理结果变量(作为字符串),只需使用正则表达式在其中查找字符串“ErrorMessage”:

result.match('/ErrorMessage/')

答案 3 :(得分:0)

您的返回值是有效的xml,因此您可以使用“xml”作为dataType并获取文档(如果使用“html”,则获取字符串)