在 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 成功时将数字转化为星级?

在 jQuery 中,如何在 ajax 调用失败时恢复可拖动对象?

如何使用jquery监控ajax请求的进度响应

使用 JSONP 时如何捕获 jQuery $.getJSON(或数据类型设置为“jsonp”的 $.ajax)错误?