我正在使用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。
我猜我有一些基本的误会,所以如果有人可以提供帮助......
答案 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>/);
首先清除新行。