PHP JSON编码对象导致Ajax错误

时间:2015-05-30 05:09:07

标签: javascript php jquery ajax json

过去几个小时这一直困扰着我,我尝试了各种各样的搜索,但从来没有找到答案的确切问题。也许询问并显示一些代码将帮助我解决这个问题。

我正在使用ajax对PHP发帖,我想给出一个通知,以便我可以更新页面上的div。在这种情况下,我只需要PHP来说出类似“Cfail”的内容,javascript会用它来更新页面内容。

最初,我打算尝试文字回复。所以,我的PHP就是这样的:

<?php
session_start(); //Because have an encoded captcha answer.
if(empty($_POST['captinput']) || md5($_POST['captinput']) !== $_SESSION['captchacode']){
    echo 'Cfail';
}
?>

Javascript将是:

$(document).ready(function(){

    $('form#Contact').submit(function(e){
        e.preventDefault();
        var $form = $(this); 
        var formdata = $form.serialize();
        var myurl = $form.attr('action');
        $('#loader').stop(true).fadeTo(300,1);

        $.ajax({
            url: myurl,
            dataType: 'text',
            cache: 'false',
            type: 'POST',
            data: formdata,
            success: function(returned){
                $('#loader').stop(true).fadeTo(300,0);
                if(returned=='Cfail'){
                    alert("I read it right!");
                }
            }
        });
    });
});

它会很好地运行脚本,但结果永远不会是我要求的。警报显示了corrct文本,然而,研究表明,问题是PHP显然增加了空白区域。常见的答案是编码JSON响应。所以,我试过了。

更新了PHP:

<?php
    sesson_start(); // Captcha Stored in Session
    header('Content-type: application/json');
    if(empty($_POST['captinput']) || md5($_POST['captinput']) !== $_SESSION['captchacode']){
        $result = array('result' => 'Cfail');
        echo json_encode($result);
        exit;
     }
?>

更新了Javascript:

$(document).ready(function(){

    $('form#Contact').submit(function(e){
        e.preventDefault();
        var $form = $(this); 
        var formdata = $form.serialize();
        var myurl = $form.attr('action');
        $('#loader').stop(true).fadeTo(300,1);

        $.ajax({
            url: myurl,
            dataType: 'json',
            cache: 'false',
            type: 'POST',
            data: formdata,
            success: function(returned){
                $('#loader').stop(true).fadeTo(300,0);
                if(returned.result=='Cfail'){
                    alert("I read it right!");
                }
            }
        });
    });
});

现在不再成功运行了。警报未出现,加载程序对象仍然可见(表示成功永远不会通过)。我尝试将一个错误部分放到ajax上,它确实解雇了它。但是,我不知道如何解析甚至弄清楚错误究竟是什么。我试图获得它的最多就是PHP输出的内容,即{“结果”:“Cfail”} ....这就是我期望PHP给我的东西。

我可以解决这个问题,我做了一个类似的设置,只是回应一个数字而不是单词,而且据我所知,它曾经工作得很好。我想知道我在这里做错了什么。

修改

我设法弄清楚我的问题是什么。我有一个require('config.php');会话开始和json_encode if语句之间。由于某些原因添加了外部文件,这只是我为代码设置了一些变量,所以在第一个{JSON对象之前添加了一些隐藏字符。

不知道为什么。正如我所说,它只是一个$ var ='stuff';在要求的情况,但显然它引起了问题。 :/

2 个答案:

答案 0 :(得分:2)

一样使用
    <?php
        sesson_start(); // Captcha Stored in Session
        header('Content-type: application/json');
        if(empty($_POST['captinput']) || md5($_POST['captinput']) !== $_SESSION['captchacode']){
            //$result = array('result' => 'Cfail');
            $data['result'] = 'Cfail';
            echo json_encode($data);
            exit;
         }
    ?>

这适用于您的javascript

答案 1 :(得分:1)

使用下面的代码,在成功回调中,首先解析你从后端收到的编码json对象并访问对象属性result来检查它的值

success: function(returned){
                returned = JSON.parse(returned);
                $('#loader').stop(true).fadeTo(300,0);
                if(returned.result=='Cfail'){
                    alert("I read it right!");
                }