Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Ajax错误:即使在请求状态为200时调用函数_Jquery_Ajax - Fatal编程技术网

Jquery Ajax错误:即使在请求状态为200时调用函数

Jquery Ajax错误:即使在请求状态为200时调用函数,jquery,ajax,Jquery,Ajax,以下是我的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:ema

以下是我的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,但始终调用错误函数

有人知道吗

  • 为什么呢
  • 我怎样才能修好它

问题很可能出在这一行:
数据类型:“json”,因为它需要json响应,而您正在发送html或文本响应。让我们来看看<强>定义<强>第一:

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

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

  • dataType是告诉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');
    }

});
$json_data = json_decode(urldecode($_POST['json']));
//now $json_data variable has decoded JSON data 
echo $json_data->name;
如果您正在发布类似以下内容:
{“name”:“John Doe”}
并期待回复:
{“success”:true}

那么你应该:

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

解决方案1:(已测试)

  • 只需删除
    数据类型:'json',
    行,让jQuery决定数据类型。(它在识别方面做得很好)或确保在双方(客户端和服务器)上使用正确的数据类型
解决方案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');
    }

});
$json_data = json_decode(urldecode($_POST['json']));
//now $json_data variable has decoded JSON data 
echo $json_data->name;
解决方案3:(未测试)

通过设置
contentType
:like发送JSON对象

contentType: "application/json; charset=utf-8", 
然后使用
php://input
注意:$
\u POST
在这里不起作用)

方法如下:

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');
    }

});
$json_data = json_decode(urldecode($_POST['json']));
//now $json_data variable has decoded JSON data 
echo $json_data->name;
  • 在PHP文件
    头中设置内容类型('Content-Type:application/json;charset=UTF8')
  • 获取数据
    $input=file\u获取内容('php://input');
  • 解码数据
    $decoded\u输入=urldecode($input)
  • 最后,将其解码为JSON对象
    $data=JSON\u decode($input)

如果请求有效,但反序列化失败,则可能发生这种情况。如果您实际使用控制台和传递给
error
处理程序函数的参数对此进行调试,您可以得到要诊断的错误消息。您能显示您得到的响应吗?似乎您没有设置json格式的响应。在Ajax的数据中不需要使用
JSON.stringify
call@PankajMakwana“您不需要在Ajax调用的数据中使用
JSON.stringify
”@Phil发现得很好,但如果这是OP的生产代码,则由于语法原因,不会发出请求error@Alena您可以这样做
{name:name,email:email,password:password}
在php端,您可以使用
$\u POST['email']
a)您不需要在jQuery中使用
encodeURIComponent
,它可以为您这样做,因此您只需对数据进行双重编码。b)您不必在
$\u POST
$\u GET
属性上使用
urldecode
。请求中的任何数据都已被删除decoded@Phil也许你是对的,但是数据是像json字符串一样在服务器上运行。因此,我添加了
encodeURIComponent
进行编码,而在服务器端,数据没有解码,所以我使用了
urldecode
顺便说一句,我不确定OP是否需要编码。@Atlas\u Gondal这就是我要找的。非常感谢:)