Ajax错误:即使请求状态为200时也会调用该函数

艾琳娜

这是我的Ajax呼叫代码:

var name = $('#name').val();
var email = $('#email').val();
var password = $('#password').val();
$.ajax({
    type: 'POST',
    url: 'ajax.php',
    cache: false,
    data: { json : JSON.stringify({
        name:name,
        email:email,
        password:password
    })},
    dataType: 'json',

    success: function(){
        alert('request successful');
    },

    error: function(){
        alert('error occured');
    }

});

请求状态为200,但错误函数始终被调用。

有人知道吗,

  • 这是为什么?
  • 我该如何解决?
Atlas_Gondal

最有可能的问题是,在这行中:dataType: 'json',因为它期望Json响应,并且您正在发送html或文本文本响应。让我们来看一下定义

  • JSON.stringify将Javascript对象转换为JSON文本,并将该JSON文本存储在字符串中。

  • contentType是发送到服务器的标头,指定特定格式。

  • dataType是告诉jQuery期望什么样的响应。

例子:

如果您要发布类似的信息{"name":"John Doe"}{"success":true}

然后,您应该具有:

var data = {"name":"John Doe"};
dataType : "json",
contentType: "application/json; charset=utf-8",
data : JSON.stringify(data),

有关更多详细信息:检查jQuery Docs

解决方案1 ​​:(已测试)

  • 只需删除dataType: 'json',行,然后让jQuery确定数据类型即可。(在识别方面做得很好)或确保在两侧(客户端和服务器)使用正确的dataType

解决方案2 :(经过测试)

jQuery的:

var name = $('#name').val();
var email = $('#email').val();
var password = $('#password').val();
$.ajax({
    type: 'POST',
    url: 'ajax.php',
    dataType : "html", //assuming you need html response like '<div>Success</div>'
                       //Common types: html, xml, json & text
    cache: false,
    data: { json : encodeURIComponent(JSON.stringify({
        name:name,
        email:email,
        password:password
    }))},


    success: function(){
        alert('request successful');
    },

    error: function(){
        alert('error occured');
    }

});

PHP:

$json_data = json_decode(urldecode($_POST['json']));
//now $json_data variable has decoded JSON data 
echo $json_data->name;

解决方案3 :(未经测试)

通过设置发送JSON对象contentType

contentType: "application/json; charset=utf-8", 

然后使用读取原始输入php://input注意:$_POST在这里不起作用)

就是这样:

  • 在PHP文件中设置内容类型 header('Content-Type: application/json; charset=UTF8');
  • 获取数据 $input = file_get_contents('php://input');
  • 解码数据 $decoded_input = urldecode($input);
  • 最后,将其解码为JSON对象 $data = json_decode($input);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

即使返回HTTP 200,也不会调用AJAX成功函数

即使标头状态代码为200,翻新也会调用failure()方法

即使未单击Matplotlib按钮,也会调用该函数

jQuery ajax调用获得状态为200的错误响应

jQuery ajax调用返回错误,就绪状态为4,状态为200,状态文本为ok

Ajax调用返回错误,状态为200,状态文本为OK

即使出现错误,Azure APIM 也会调用函数

即使在UC的设计和UC实例上将AutoValidate设置为Disable时,也会调用UserControl验证函数

我可以在编译时强制执行永远不会调用该函数吗?

请求失败,HTTP 状态为 400:从 Windows 应用程序调用 Web 服务时请求错误

将 Azure 函数请求记录为失败并返回状态 200

在前台屏幕上更新全局状态时,即使屏幕在后台也会调用 useFocusEffect 钩子

每次点击都会调用该函数两次

即使响应为200(成功),也会调用Axios Catch

Ajax响应状态为200,但显示错误消息

Ajax,Django:状态为200,但抛出错误而不是成功

javascript中的对象必需错误,即使正确调用该函数也是如此

状态为200时,Axios发送网络错误

连接到Websocket时状态为200,但这是错误的吗?

为什么调用该函数时未读取该函数?

AJAX呼叫错误-状态为400(错误请求)

为什么该函数调用抛出“等待仅在异步函数中有效”的语法错误,即使该函数是异步的?

即使状态为200并且有响应,Axios POST也会返回“网络错误”

Angular http响应作为错误参数,即使状态为200

我正在订阅同一函数中的数据,每次我在 Angular 的文本框正确方法中键入内容时都会调用该函数?

即使单击提交按钮后也不会调用 onSubmit 函数

Powershell-即使发生错误,Catch块也不会调用

使用Jasmine在AngularJS中测试去抖动的函数永远不会调用该函数

当在另一个函数中调用该函数时,React Hooks状态无法正常工作