Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
Php $.post在声明数据类型时不起作用_Php_Jquery_Ajax - Fatal编程技术网

Php $.post在声明数据类型时不起作用

Php $.post在声明数据类型时不起作用,php,jquery,ajax,Php,Jquery,Ajax,我注意到下面的代码不起作用。当我删除,“json”)在它的结尾,它的工作,但我只是得到失败。我在网站上遵循jquery规范。知道为什么$.post方法不能工作/输入吗 我知道它不会输入$.post的原因是因为alert(form.serialize())未被调用 在我的PHP中,我在发布时返回以下内容: $arr = array('status' => 'SUCCESS'); echo json_encode($arr); exit();

我注意到下面的代码不起作用。当我删除
,“json”)在它的结尾,它的工作,但我只是得到失败。我在网站上遵循jquery规范。知道为什么
$.post
方法不能工作/输入吗

我知道它不会输入$.post的原因是因为
alert(form.serialize())未被调用

在我的PHP中,我在发布时返回以下内容:

        $arr = array('status' => 'SUCCESS');

        echo json_encode($arr);
         exit();
下面是我的ajax:

var form = $('#lines');
        $.post('', form.serialize(), function(json) {
            alert(form.serialize());

            if(json.status === 'SUCCESS') {
                alert(json);
                console.log('success');
            } else {
                alert(json);
                console.log('failure');
            }
        }, "json");

如果我在最后删除json部分,它只返回页面的整个HTML。

您的响应可能不是json。如果您删除
,“json”
,它可以工作,但会返回字符串数据,因此代码无法工作(字符串上的json.status将无法工作)。如果您将
,“json”
,那么如果返回的是不正确的json,那么它可能不会工作

您可以做的是:最后留下“json”,因为这是您想要的,添加
console.data(json)
console.data(类型为json)仅在成功功能开始时

忘了警报吧,首先它会停止您的脚本,它不像控制台那么精确。尽可能使用控制台

我可以建议你这样写,让它更具可读性:

 console.log('form.serialize()',form.serialize()) ;

    var post = $.ajax({
        method : 'POST',
        url : '',
        data : form.serialize(),
        dataType : "json"
    });

    post.done(function(json){

        console.log('success',json) ;
        console.log('typeof json',typeof json) ;

        if(json.status === 'SUCCESS') {
            console.log('success');
        } else {
            console.log('failure');
        }

    }) ;

    post.fail(function(data){
        console.log('fail',data) ;
        alert('post fail') ;
    }) ;
这是我完整的php文件
index.php
。结构应该和你的一样。只需注意上面的部分,我确保在有post数据时,我只回显json并返回,因此不会发送任何其他内容(如退出)


jQuery('input[type=“button”]”)。在('click',function()上{
var form=jQuery(this).closest('form');
log('form.serialize()',form.serialize());
var post=$.ajax({
方法:“POST”,
url:“”,
数据:form.serialize(),
数据类型:“json”
});
post.done(函数(json){
log('success',json);
log('typeof json',typeof json);
如果(json.status==='SUCCESS'){
console.log('success');
}否则{
console.log('failure');
}
}) ;
post.fail(功能(数据){
console.log(this);
console.log('fail',数据);
警报(“失败后”);
}) ;
}) ;

您需要在php代码中指定标题,并告诉jQuery一个“json”响应正在进行中。。下面是正确的php代码

header('Content-Type: application/json');
$arr = array('status' => 'SUCCESS');
echo json_encode($arr);
exit();

注意发送json头的那一行,现在试试看,它会工作的

FYI:如果我删除json部分,它只会返回object对象。返回object对象的是什么?警报(json)?这就是为什么您需要使用控制台而不是警报,它更详细,您将看到完整的对象。你试过下面的代码吗?(我编辑过它,它有一些错误)是的,我现在只是失败了,我正在尝试检查我的php端。在控制台中“失败”后,你应该有一些消息吗?你确定它会调用你的php文件吗?url:“”表示您正在同一文件夹中调用index.php,您确定您的php就在那里吗?我正在从同一个文件调用ajax是的。
header('Content-Type: application/json');
$arr = array('status' => 'SUCCESS');
echo json_encode($arr);
exit();