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

时间:2017-07-23 07:17:09

标签: php jquery ajax

我注意到以下代码无效。当我在它结束时删除, "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。

2 个答案:

答案 0 :(得分:0)

您的回答可能不是json。如果你删除,"json",它可以工作,但发布返回字符串数据,所以你的代码不能工作(字符串上的json.status将不起作用)。如果你放,"json",那么如果返回不正确,那么它就不会起作用。

你可以做什么:最后留下“json”,因为这就是你想要的,只需在成功函数开始时添加console.data(json) ;console.data(typeof 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。结构应该看起来像你的。请注意我确定的顶部部分比我发布数据时,我只回显json并返回,所以没有其他任何内容(如退出)。

<?php
    if ( isset($_POST['name']) )
    {
        echo json_encode(array('status' => 'SUCCESS')) ;
        return false ;
    }
?>

<form>
    <input type="text" name="name" />
    <input type="button" />
</form>

<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
<script>
    jQuery('input[type="button"]').on('click',function(){

        var form = jQuery(this).closest('form') ;

        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(this) ; 
            console.log('fail',data) ;
            alert('post fail') ;
        }) ;
    }) ;

</script>

答案 1 :(得分:0)

你需要在php代码中指定标题,并告诉jQuery一个&#34; json&#34;响应即将来临..这是正确的PHP代码

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

注意发送json标题的行,现在就试试吧,它会工作