在 jQuery 中使用 $.ajax 时,如何故意在加载的文档中抛出错误?
Posted
技术标签:
【中文标题】在 jQuery 中使用 $.ajax 时,如何故意在加载的文档中抛出错误?【英文标题】:When using $.ajax in jQuery, how can I deliberately throw an error in the loaded document? 【发布时间】:2011-01-13 20:28:44 【问题描述】:在我的文档中,我有这个脚本:
$.ajax( type:"POST",url:"ajax.php",data:data,
success: function()
//onsuccess
,
error: function()
//onerror
);
如何在文档ajax.php
中故意抛出错误?仅抛出 400 HTTP 状态代码或其他内容就足够了吗? (如果是这样,400 是正确的吗?)
我问的原因是我想用它来向服务器提交一个表单,如果一个字段没有正确填写,我想通过$.ajax
中的错误参数提醒用户。我知道我可以首先使用 javascript 来做到这一点,但我希望我能这样做(所以我不必写两次验证)。 当然,通过这种方式,我无法将不同的字段与其他字段分开。
根据我想要使用它的目的,我可以以某种方式抛出“自定义错误”,因此如果字段 name
没有正确填写,它会返回名称字段(即name
)。这样做是否足够:
在 ajax.php 中:
if (isFilledOutProperly($name) == false)
echo "name";
else
echo "success";
还有:
success: function(data)
if (data == 'name')
//error
else
//success
,
我可能在这里走错了路,但如果有人对我如何做到这一点有更好的建议,请告诉我。谢谢!
【问题讨论】:
【参考方案1】:$.ajax()
调用的 error
子句并不适合您所指的情况。 error
涵盖了 HTTP 错误等情况。在这种情况下,验证失败并不是真正的错误。您最好在success
回调中使用从服务器返回的适当数据来指示那些。
如果你看documentation:
error(XMLHttpRequest, textStatus, errorThrown)Function
请求时调用的函数 失败。函数通过三个 参数: XMLHttpRequest 对象, 描述错误类型的字符串 发生的和可选的 异常对象,如果发生。 第二个可能的值 参数(除了 null)是“超时”, “错误”、“未修改”和 “解析器错误”。这是Ajax Event。
注意:它所说的错误条件是解析错误、超时、错误 (HTTP) 和未修改(这是另一个 HTTP 响应)。
从技术上讲,您的请求成功,但验证失败,这本身并不是错误。
【讨论】:
根据 REST 原理,以 HTTP 200 响应 POST 请求意味着资源创建成功。您可以使用 HTTP 400 进行响应,并以 text/html/json/xml 格式提供有关错误的详细信息。 我知道,但正如我所问:我可以通过强制 HTML 错误来故意抛出$.ajax()
的“错误”部分吗?
是的,如果你用 HTTP 2xx 以外的方式响应,“错误”部分将被调用。以上是关于在 jQuery 中使用 $.ajax 时,如何故意在加载的文档中抛出错误?的主要内容,如果未能解决你的问题,请参考以下文章
JQuery Ajax - 如何在进行 Ajax 调用时检测网络连接错误
如何在 Django 中使用 jQuery/Ajax 发布?
如何在 Spring Boot 中使用 JavaScript、jQuery 的 Ajax 成功时将数字转化为星级?