Проверьте наличие элемента в результате AJAX-запроса - PullRequest
0 голосов
/ 18 марта 2011

Код ниже всегда возвращает $('.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 ]

2 голосов
/ 18 марта 2011

Я однажды столкнулся с точно такой же проблемой.

Вы не можете .find() это сделать, потому что элемент, который вы пытаетесь найти, находится на корневом уровне коллекции.
(Обратите внимание, что $(selector, result); - это сокращенный синтаксис для $(result).find(selector);)

Однако .filter('.ErrorMessage') будет соответствовать этому, просто отлично.

(Кстати, вы столкнетесь с той же проблемой, когда будете передавать весь HTML-документ в функцию jQuery () - тогда элементы <html>, <head> и <body> удаляются.)

Что вы должны сделать (чтобы поймать большинство / все крайние случаи), это следующее:

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

... и Боб - ваш дядя.: -)

2 голосов
/ 18 марта 2011

Вы можете использовать jQuery, чтобы сначала создать элементы DOM из результата (добавив их в контейнер), а затем проверить:

$('.ErrorMessage', $("<div/>").html(result)).length
1 голос
/ 18 марта 2011

Вы можете иметь дело с переменной результата напрямую (в виде строки) и просто использовать регулярное выражение, чтобы найти в ней строку «ErrorMessage»:

result.match('/ErrorMessage/')
0 голосов
/ 18 марта 2011

Ваше возвращение - действительный xml, поэтому вы можете использовать 'xml' в качестве dataType и получить документ (вместо строки, если вы используете 'html')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...