Попытка разобрать xhr.responseText - PullRequest
1 голос
/ 04 августа 2011

Я использую jquery get для вызова ASP MVC контроллера. Который возвращает частичное представление. то есть куча html

В случае ошибки я хотел бы заполнить некоторую информацию для пользователя, но ASP MVC отправляет всю страницу назад, поэтому мне нужно извлечь из нее текст.

Я пробовал:

$('#edit').ajaxError(function (e, xhr, settings, exception) {
        var item = xhr.responseText.text();
        var response = item.match(/.*<body.*>(.*)<\/body>.*/);
        if (!response) {
            $(this).html('Error: ' + xhr.status + ' Message:' + xhr.statusText);
        }
        else {
            $(this).html(response);
        };
    });

Но я получаю Uncaught TypeError: [сопровождается содержимым xhr.responseText] не имеет текста метода

Если я вызываю match напрямую в responseText, я получаю нулевое значение.

Полагаю, у меня есть какое-то фундаментальное недоразумение, так что если кто-то может помочь ...

Ответы [ 4 ]

6 голосов
/ 04 августа 2011

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

var response = xhr.responseText.match(/.*<body.*>([\s\S]*)<\/body>.*/);
3 голосов
/ 04 августа 2011

xhr.responseText является строкой ( документы ), и нет собственного метода прототипа String с именем text(). Таким образом, строка ниже, где вы пытаетесь вызвать .text() с responseText, вызывает эту ошибку:

var item = xhr.responseText.text();

Поскольку match() является методом на прототипе String, вы просто вызвали бы его прямо с responseText, если пытаетесь найти что-то в нем.

var response = xhr.responseText.match(/.*<body.*>(.*)<\/body>.*/);

Найдет ли он что-нибудь оттуда, посмотрим;)

1 голос
/ 17 февраля 2014
$(function() {

var bar = $('.bar');
var percent = $('.percent');
var status = $('#status') ;

$('form').ajaxForm({

    beforeSend: function() {
        status.empty();
        var percentVal = '0%';
        bar.width(percentVal)
        percent.html(percentVal);
    },
    uploadProgress: function(event, position, total, percentComplete) {
        var percentVal = percentComplete + '%';
        bar.width(percentVal)
        percent.html(percentVal);
    },
    success: function() {
        var percentVal = '100%';
        bar.width(percentVal)
        percent.html(percentVal);
    },
    complete: function(xhr) {
        $('#ttt').html(xhr.responseText.replace(/[\r\n]/g, ' ').match(/<!--t-->([\s\S]*)<!--t1-->/));
     }

}); 



})();       
0 голосов
/ 04 августа 2011

Ваше регулярное выражение столкнется с проблемами из-за новых строк в вашем HTML.

var response = xhr.responseText.replace(/[\r\n]/g, ' ').match(/<body.*>(.*)<\/body>/);

Это сначала очищает строки.

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