Jquery 我应该使用HTTP状态代码来指示AJAX post请求的结果吗?

Jquery 我应该使用HTTP状态代码来指示AJAX post请求的结果吗?,jquery,ajax,asp.net-mvc-5,unobtrusive-validation,http-response-codes,Jquery,Ajax,Asp.net Mvc 5,Unobtrusive Validation,Http Response Codes,我正在将“创建用户”表单作为局部视图加载到模式对话框中。在该视图中,我使用MVC助手Ajax.beginnform,指定InsertionMode.ReplaceWith并为表单本身设置UpdateTargetId,因此表单可以提交,它将返回更新版本的表单本身,并在需要更多信息时进行替换。基本上,AJAX请求应该返回HTML 我应该如何传达此类AJAX请求的其他结果,例如当操作完成且没有HTML可返回时(例如,用户已成功创建,因此需要关闭模式对话框) 我可以使用HTTP状态码或内容类型头吗?我正

我正在将“创建用户”表单作为局部视图加载到模式对话框中。在该视图中,我使用MVC助手Ajax.beginnform,指定InsertionMode.ReplaceWith并为表单本身设置UpdateTargetId,因此表单可以提交,它将返回更新版本的表单本身,并在需要更多信息时进行替换。基本上,AJAX请求应该返回HTML

我应该如何传达此类AJAX请求的其他结果,例如当操作完成且没有HTML可返回时(例如,用户已成功创建,因此需要关闭模式对话框)

我可以使用HTTP状态码或内容类型头吗?我正在寻找最干净的方法来实现这一点,同时保持与现有的Ajax.BeginForm方法的兼容性,该方法使用微软不引人注目的Ajax。也许我需要在AjaxOptions中指定一个OnComplete处理程序,检查状态代码或内容类型,然后在操作已完成且没有HTML可返回时取消默认的“ReplaceWith”行为


我的想法与另一篇文章中的评论相同:“通过检查HTML内容中的错误消息来测试响应,而不仅仅是测试响应代码,这似乎并不实际。”

使用http状态代码是有问题的。考虑一个基于Ajax的搜索引擎。用户输入一些随机垃圾,但没有结果。服务器可以通过两种方式发出“无结果”的信号:

404-“未找到请求的url”。这是一个HTTP级别的错误,必须解释为“搜索引擎脚本不存在”。这完全是错误的做法-脚本存在,它运行,它只是没有找到任何结果。但是现在浏览器认为搜索URL不好

200-确定,并在结果正文中返回搜索状态信息。e、 一些json:
{“状态”:“ok”,“结果”:[]}
。这是正确的做法。搜索脚本存在,它运行,它成功地查询了数据库,它只是没有结果返回给用户


在现实世界中,这相当于你的配偶告诉你去商店购买随机的物品X。你开车去商店,商店在那里,它是开放的,但它只是缺货。在这种情况下。“404”-存储不存在。“200”+json-存储区存在,但没有库存。

使用http状态代码有问题。考虑一个基于Ajax的搜索引擎。用户输入一些随机垃圾,但没有结果。服务器可以通过两种方式发出“无结果”的信号:

404-“未找到请求的url”。这是一个HTTP级别的错误,必须解释为“搜索引擎脚本不存在”。这完全是错误的做法-脚本存在,它运行,它只是没有找到任何结果。但是现在浏览器认为搜索URL不好

200-确定,并在结果正文中返回搜索状态信息。e、 一些json:
{“状态”:“ok”,“结果”:[]}
。这是正确的做法。搜索脚本存在,它运行,它成功地查询了数据库,它只是没有结果返回给用户


在现实世界中,这相当于你的配偶告诉你去商店购买随机的物品X。你开车去商店,商店在那里,它是开放的,但它只是缺货。在这种情况下。“404”-存储不存在。“200”+json-存储存在,但没有库存。

是,响应代码应始终指示状态。如果一切都好,你应该返回200,不管怎样。但是,在这种情况下,仅响应代码对您没有帮助

例如,无论是要加载新的HTML,还是只需要关闭模式,在这两种情况下,响应代码都是200。如果您需要响应的可变性,那么您需要停止使用
Ajax
控件

一般来说,我不鼓励每个人使用任何
Ajax
控件。无论你轻松地获得了多少微小的收益,你都会彻底失去对所发生事情的可见性和控制力。几乎总是当人们使用这些控件时,他们会在这里或其他网站上寻求帮助,因为某些东西不起作用


如果您实现自己的AJAX,那么您可以返回一个JSON对象,这将给您带来无限的灵活性。您可以对您喜欢的任何状态进行编码,如果您喜欢,还可以包含应该呈现的HTML。然后,您可以在AJAX回调中检查该对象并做出适当的反应,而不是依赖Microsoft来决定应该做什么。

是的,响应代码应该始终指示状态。如果一切都好,你应该返回200,不管怎样。但是,在这种情况下,仅响应代码对您没有帮助

例如,无论是要加载新的HTML,还是只需要关闭模式,在这两种情况下,响应代码都是200。如果您需要响应的可变性,那么您需要停止使用
Ajax
控件

一般来说,我不鼓励每个人使用任何
Ajax
控件。无论你轻松地获得了多少微小的收益,你都会彻底失去对所发生事情的可见性和控制力。几乎总是当人们使用这些控件时,他们会在这里或其他网站上寻求帮助,因为某些东西不起作用


如果您实现自己的AJAX,那么您可以返回一个JSON对象,这将给您带来无限的灵活性。您可以对您喜欢的任何状态进行编码,如果您喜欢,还可以包含应该呈现的HTML。然后,您可以在AJAX回调中检查该对象并做出适当的反应,而不是依赖Microsoft来决定应该做什么。

对不起,这是错误的。404表示未找到请求的资源。它与URL无关,只是URL表示请求的资源。进一步,查询