我正在加载"创建用户"形成一个模态对话框作为局部视图。在该视图中,我使用MVC帮助器Ajax.BeginForm,指定InsertionMode.ReplaceWith和UpdateTargetId设置为表单本身,因此可以提交表单,它将返回自身的更新版本,如果更多则自行替换需要信息。基本上,AJAX请求应该返回HTML。
如何传达此类AJAX请求的其他结果,例如操作完成且没有HTML返回(例如用户已成功创建,因此需要关闭模式对话框)?
我可以使用HTTP状态代码或内容类型标头吗?我正在寻找最简洁的方法来实现这一点,同时保持与使用微软不引人注目的AJAX的现有Ajax.BeginForm方法的兼容性。也许我需要在AjaxOptions中指定一个OnComplete处理程序,检查状态代码或内容类型,然后取消默认" ReplaceWith"操作已完成且没有HTML返回的行为。
我正在思考与另一篇文章中的评论相同的行:"通过检查错误消息的HTML内容来测试响应似乎不切实际,而不仅仅是测试响应代码。" Using Http Status Codes During Form Validation
答案 0 :(得分:0)
使用http状态代码存在问题。考虑一个基于AJAX的搜索引擎。用户拳击一些随机垃圾,没有结果。服务器可以通过两种方式发回“无结果”信号:
404 - “请求的网址未找到”。这是一个HTTP级错误,必须解释为“搜索引擎脚本不存在”。这正是错误的事情 - 脚本存在,它运行,它只是没有找到结果。但现在浏览器仍然认为搜索网址不好。
200 - 确定,并在结果正文中返回搜索状态信息。例如一些json:{"status":"ok","results":[]}
。这是正常的事情。搜索脚本存在,它运行,它成功查询了数据库,它只是没有结果返回给用户。
在现实世界中,它相当于你的配偶告诉你去商店购买随机物品X.你开车到商店,商店在那里,它是开放的,但它只是缺货。在这种情况下。 “404” - 商店不存在。 “200”+ json - 商店存在,但没有库存。
答案 1 :(得分:0)
是的,响应代码总是表示状态。如果一切顺利,你应该返回200,无论如何。但是,在这种情况下,单独的响应代码对您没有帮助。
例如,无论是否要加载新的HTML,或者只需要关闭模态,响应代码在任何一种情况下都是200。如果您需要响应中的可变性,则需要停止使用Ajax
控件。
一般来说,我不鼓励每个人使用任何Ajax
控件。您可以轻松获得轻微的收益,您在可见度和对发生的事情的控制方面会大幅度丧失。几乎总是当人们使用这些控件时,他们会在这里找到他们的方式,或者其他一些网站寻求帮助,因为某些事情或其他事情都没有起作用。
如果您实现自己的AJAX,那么您可以返回一个JSON对象,它将为您提供更大的灵活性。您可以编码您喜欢的任何状态和包括应该呈现的HTML,如果您愿意。然后,您可以在AJAX回调中检查该对象并做出适当的反应,而不是依靠Microsoft来决定应该做什么。