Ajax 删除请求返回 200 但触发错误

Posted

技术标签:

【中文标题】Ajax 删除请求返回 200 但触发错误【英文标题】:Ajax delete request returns 200 but fires error 【发布时间】:2021-09-10 01:41:33 【问题描述】:

我正在尝试为我的项目创建一个简单的 API。我正在使用 jquery Ajax 发送 DELETE 请求。删除请求被发送,执行它应该做的事情(从数据库中删除一个条目),返回状态 200,但触发一个错误事件。

我已经在这些帖子中寻找解决方案,但他们无法帮助我:

Ajax request returns 200 but error event is fired Ajax request returns 200 OK but error event is fired Ajax delete returns 200 but firing off error event

这是 AJAX 代码:

        function ajaxCall(method,hmm) // function that send an ajax request
            $.ajax(
                dataType: 'JSON',
                url: '/APIHandler.php?' + $.param(values:hmm),
                type: method,
                success: function(response)  // when the request is done delete the previously placed products for new ones
                    console.log(response);
                    const parentDiv = document.querySelector('#basic-grid');
                    removeAllChildNodes(parentDiv);
                    turnToObjects(response);
                ,
                error: function(xhr)
                    alert(xhr);
                    console.log(xhr);
                
              );
        
...
ajaxCall('DELETE',checked);

APIHandler 代码:

if ($_SERVER['REQUEST_METHOD'] === 'DELETE') 
    $vals = $_GET['values'];
    $API->delete($vals);

请求响应:

abort: ƒ (e)
arguments: [Exception: TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them at Function.r (<anonymous>:1:83)]
caller: [Exception: TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them at Function.r (<anonymous>:1:83)]
length: 1
name: "abort"
prototype: constructor: ƒ
__proto__: ƒ ()
[[FunctionLocation]]: jquery.min.js:2
[[Scopes]]: Scopes[3]
always: ƒ ()
catch: ƒ (e)
done: ƒ ()
fail: ƒ ()
getAllResponseHeaders: ƒ ()
getResponseHeader: ƒ (e)
overrideMimeType: ƒ (e)
pipe: ƒ ()
progress: ƒ ()
promise: ƒ (e)
readyState: 4
responseText: ""
setRequestHeader: ƒ (e,t)
state: ƒ ()
status: 200
statusCode: ƒ (e)
statusText: "OK"
then: ƒ (t,n,r)

我也找不到任何错误的解决方案

[Exception: TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them at Function.r (<anonymous>:1:83)]

【问题讨论】:

【参考方案1】:

您将 dataType 设置为 JSON,因此 $.ajax 尝试将您的 ajax 响应解析为 JSON,但您的响应为空,因此引发错误。 从您的请求中发送 JSON 响应或删除 dataType 参数。

【讨论】:

【参考方案2】:

contentType:'application/json' 添加到您的代码中

并将dataType 更改为text

...
dataType: 'text',
contentType:'application/json'
...

【讨论】:

以上是关于Ajax 删除请求返回 200 但触发错误的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 状态为 200 但错误事件触发而不是成功

jQuery Ajax 返回 404 错误,但响应正确

Ajax---错误处理

Ajax 错误回调未针对 iPhone 触发

[当PHP代码失败但发送200时如何处理AJAX?

ajax请求成功返回200,但还是进入error事件