Ajax MVC部分返回正确的响应却触发了错误处理程序

干扰器

这让我完全难住了。真奇怪

我定义了这个Ajax函数:

$.ajax({
    type: 'GET',
    dataType: 'text/HTML',
    url: getLicenseeDetailsUrl,
    success: function (response) {
        $('#licenseeDetails').html('');
        $('#licenseeDetails').html(response);
    },
    error: function (xhr) {
        alert('Failed to get licensee details');
    }
});

我将它调用到我的控制器中,该控制器具有类似以下的操作:

public ActionResult LoadLicenseeDetails(long licenseeId)
{
    var model = new LicenseeDetailsViewModel();

    var licencesee = _licensingRepository.LoadById(licenseeId);
    var licenses = _licensingRepository.LoadLicenses(licenseeId);

    model.Licencee = Mapper.Map<Licensee, LicenceeViewModel>(licencesee);
    model.Licences = Mapper.Map<IEnumerable<License>, IEnumerable<LicenceViewModel>>(licenses);

    return this.PartialView("_LicenseeDetails", model);
}

这一切似乎都按预期工作,没有任何错误,但是最终触发了Ajax错误函数,而不是成功函数。

看着,xhr.responseText我可以看到来自动作控制器的正确响应信息!

所有状态也都为200 OK。我到底在这里做错了什么?

达林·迪米特罗夫(Darin Dimitrov)

我到底在这里做错了什么?

这:

dataType: 'text/HTML'

应该变成:

dataType: 'html'

从报价documentation中的dataType参数:

dataType(默认值:Intelligent Guess(xml,json,脚本或html)

类型:字符串

您期望从服务器返回的数据类型。如果未指定,则jQuery将尝试根据响应的MIME类型来推断它(XML MIME类型将产生XML,在1.4中,JSON将产生JavaScript对象,在1.4脚本中,脚本将执行该脚本,而其他任何内容将是以字符串形式返回)。可用的类型(以及作为第一个参数传递给您的成功回调的结果)是:

“ xml”:返回可以通过jQuery处理的XML文档。

“ html”:以纯文本形式返回HTML;插入到DOM中时,将评估包含的脚本标签。

“脚本”:将响应评估为JavaScript并以纯文本形式返回。除非将高速缓存选项设置为true,否则通过在URL上附加查询字符串参数“ _ = [TIMESTAMP]”来禁用高速缓存。注意:对于远程域请求,这会将POST转换为GET。

“ json”:将响应评估为JSON并返回一个JavaScript对象。JSON数据以严格的方式进行解析;任何格式错误的JSON都会被拒绝,并引发解析错误。从jQuery 1.9开始,空响应也被拒绝;服务器应返回null或{}的响应。(有关正确的JSON格式的更多信息,请参见json.org。)

“ jsonp”:使用JSONP加载JSON块。添加一个额外的“?callback =?” URL的末尾以指定回调。除非将高速缓存选项设置为true,否则通过在URL上附加查询字符串参数“ _ = [TIMESTAMP]”来禁用高速缓存。

“文本”:纯文本字符串。

多个用空格分隔的值:从jQuery 1.5开始,jQuery可以将dataType从在Content-Type标头中接收的dataType转换为您所需的dataType。例如,如果要将文本响应视为XML,请对数据类型使用“文本xml”。您还可以发出JSONP请求,将其接收为文本,并由jQuery解释为XML:“ jsonp text xml”。同样,速记字符串(例如“ jsonp xml”)将首先尝试从jsonp转换为xml,如果失败,则尝试从jsonp转换为文本,然后再从文本转换为xml。

甚至更好,只需摆脱该参数即可。jQuery足够智能,可以使用Content-Type服务器设置响应HTTP标头,以便推断正确的类型并处理传递给success回调的参数

Console在浏览器中查看javascript调试工具栏标签。它将为您提供有关该错误的更多信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章