javascript - Ajax MVC 部分返回正确响应但触发错误处理程序

标签 javascript jquery ajax asp.net-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');
    }
});

我让它调用我的 Controller ,它的 Action 如下:

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 我可以看到来自 Action Controller 的正确响应信息!!

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

最佳答案

What on earth am I doing wrong here?

这个:

dataType: 'text/HTML'

应该变成:

dataType: 'html'

引自documentation dataType 参数:

dataType (default: Intelligent Guess (xml, json, script, or html))

Type: String

The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string). The available types (and the result passed as the first argument to your success callback) are:

"xml": Returns a XML document that can be processed via jQuery.

"html": Returns HTML as plain text; included script tags are evaluated when inserted in the DOM.

"script": Evaluates the response as JavaScript and returns it as plain text. Disables caching by appending a query string parameter, "_=[TIMESTAMP]", to the URL unless the cache option is set to true. Note: This will turn POSTs into GETs for remote-domain requests.

"json": Evaluates the response as JSON and returns a JavaScript object. The JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. As of jQuery 1.9, an empty response is also rejected; the server should return a response of null or {} instead. (See json.org for more information on proper JSON formatting.)

"jsonp": Loads in a JSON block using JSONP. Adds an extra "?callback=?" to the end of your URL to specify the callback. Disables caching by appending a query string parameter, "_=[TIMESTAMP]", to the URL unless the cache option is set to true.

"text": A plain text string.

multiple, space-separated values: As of jQuery 1.5, jQuery can convert a dataType from what it received in the Content-Type header to what you require. For example, if you want a text response to be treated as XML, use "text xml" for the dataType. You can also make a JSONP request, have it received as text, and interpreted by jQuery as XML: "jsonp text xml." Similarly, a shorthand string such as "jsonp xml" will first attempt to convert from jsonp to xml, and, failing that, convert from jsonp to text, and then from text to xml.

或者更好的是,简单地去掉这个参数。 jQuery 足够智能,可以使用服务器设置的 Content-Type 响应 HTTP header 来推断正确的类型并处理传递给 success 回调的参数。

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

关于javascript - Ajax MVC 部分返回正确响应但触发错误处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21490493/

相关文章:

asp.net - UpdatePanel + Server.Transfer 问题有任何解决方法吗?

javascript - 如何使用 ajax/json 让对象一个接一个地淡入淡出

javascript - Gatsby 第二个布局模板

javascript - Discord 在角色仍然可用时显示@deleted-role

javascript - 关于大括号的 jsx 语法

javascript - JQuery insertAfter();移动下一个表格单元格

jquery - 响应式菜单需要在栏下方打开

javascript - 可重用组件来等待数据

javascript - 在 Fullcalendar 中拖动时如何链接两个事件?

javascript - 使用 AJAX 编辑 JSON 文件