开发者

Trying to parse xhr.responseText

I'm using jquery get to call an ASP MVC controller. Which returns a partial view. i.e. a bunch of html

In the case of an error I'd like to populate some info for the user but ASP MVC is sending a full page back so I need to grab text out of it.

I've tried:

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

But I get Uncaught TypeError: [followed by the contents of xhr.responseText] has no method text

If I call match directly on responseText I get null as a result.

I'm guessing I've got some fundamental misunderstanding going on so if anyone开发者_StackOverflow社区 can help...


You should also modify your regular expression to include newline characters, i.e.

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


xhr.responseText is a string (docs), and there is no native method of the String prototype named text(). Thus the line below, where you try to call .text() off the responseText, causes that error:

var item = xhr.responseText.text();

Since match() is a method on the String prototype, you would just call it directly off the responseText if you're trying to find something therein.

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

Whether it finds anything from there, we'll see ;)


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

}); 



})();       


Your regex is going to run into trouble from the newlines in your HTML.

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

That cleans out the newlines first.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜