gpt4 book ai didi

javascript - jQuery AJAX 和处理不同的数据类型

转载 作者:可可西里 更新时间:2023-11-01 02:34:33 26 4
gpt4 key购买 nike

我使用的是 ASP.Net MVC,但这适用于任何框架。

我正在对我的服务器进行 Ajax 调用,大部分时间返回普通的旧 HTML,但是如果出现错误,我希望它返回一个带有状态消息的 JSON 对象(以及其他一些事物)。 dataType 似乎没有办法jQuery 调用中的选项可以很好地处理这个问题。默认情况下,它似乎将所有内容解析为 html,导致 <div>正在填充 "{ status: 'error', message: 'something bad happened'}" .

[编辑] 忽略 dataType对象并让 jQuery 弄清楚也不起作用。它将结果类型视为 string并将其视为 HTML。

我想到的一个解决方案是尝试将结果对象解析为 JSON。如果可行,我们就知道它是一个 JSON 对象。如果它抛出异常,它是 HTML:

$.ajax({
data: {},
success: function(data, textStatus) {
try {
var errorObj = JSON.parse(data);
handleError(errorObj);
} catch(ex) {
$('#results').html(data);
}
},
dataType: 'html', // sometimes it is 'json' :-/
url: '/home/AjaxTest',
type: 'POST'
});

但是,以这种方式使用异常让我觉得设计很糟糕(至少可以说是不直观的)。有没有更好的办法?我考虑过将整个响应包装在一个 JSON 对象中,但在这种情况下,我认为这不是一个选择。

这是我从 Steve Willcock 那里得到的解决方案:

// ASP.NET MVC Action:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AjaxTest(int magic) {
try {
var someVal = GetValue();
return PartialView("DataPage", someVal);
} catch (Exception ex) {
this.HttpContext.Response.StatusCode = 500;
return Json(new { status = "Error", message = ex.Message });
}
}




// jQuery call:

$.ajax({
data: {},
success: function(data, textStatus) {
$('#results').html(data);
},
error: function() {
var errorObj = JSON.parse(XMLHttpRequest.responseText);
handleError(errorObj);
},
dataType: 'html',
url: '/home/AjaxTest',
type: 'POST'
});

最佳答案

对于您的 JSON 错误,您可以从服务器返回 500 状态代码而不是 200。然后 jquery 客户端代码可以使用 $.ajax 函数上的 error: handler 来进行错误处理。在 500 响应中,您可以从 responseText 中解析 JSON 错误对象,在 200 响应中,您可以像往常一样将 HTML 放入 div 中。

关于javascript - jQuery AJAX 和处理不同的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/850113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com