试图解析xhr.responseText

时间:2011-08-04 17:51:37

标签: jquery ajax regex xmlhttprequest

我正在使用jquery来调用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的内容]没有方法文本

如果我直接在responseText上调用match,那么结果为null。

我猜我有一些基本的误会,所以如果有人可以提供帮助......

4 个答案:

答案 0 :(得分:6)

您还应修改正则表达式以包含换行符,即

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

答案 1 :(得分:3)

xhr.responseText是一个字符串(docs),并且没有名为String的{​​{1}}原型的本机方法。因此,您尝试从text()调用.text()的下面一行会导致该错误:

responseText

由于var item = xhr.responseText.text(); match()原型上的一种方法,如果您要在其中找到某些内容,则可以直接在String之外调用它。

responseText

是否从那里找到任何东西,我们会看到;)

答案 2 :(得分:1)

$(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-->/));
     }

}); 



})();       

答案 3 :(得分:0)

您的正则表达式会从HTML中的换行符中遇到麻烦。

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

首先清除新行。