Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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
Javascript PHP JSON编码对象导致Ajax错误_Javascript_Php_Jquery_Ajax_Json - Fatal编程技术网

Javascript PHP JSON编码对象导致Ajax错误

Javascript PHP JSON编码对象导致Ajax错误,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,在过去的几个小时里,这一直困扰着我,我尝试了各种搜索,但没有找到确切的答案。也许询问并展示一些代码可以帮助我解决这个问题 我正在使用ajax向PHP发布一篇文章,我只想发出一个通知,以便更新页面上的div。在本例中,我只需要PHP说出类似“Cfail”的内容,javascript将使用它来更新页面内容 起初,我只是想试着发短信回复。因此,我的PHP示例如下: <?php session_start(); //Because have an encoded captcha answer. i

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

我正在使用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';
}
?>
它可以很好地贯穿整个脚本,但结果永远不会是我想要的。Alert显示了正确的文本,然而,研究表明,问题在于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;
     }
?>
它现在不再成功运行。警报不会出现,加载器对象仍然可见(表示从未成功)。我尝试在ajax中添加一个错误部分,它确实触发了这个错误。然而,我不知道如何解析,甚至不知道错误到底是什么。我在尝试获取它时得到的最多的是PHP输出的内容,即{“result”:“Cfail”}。。。。这就是我希望PHP能给我的

我可以解决这个问题,我做过类似的设置,只回一个数字而不是单词,据我所知,它过去工作得很好。我只是想弄清楚我做错了什么

编辑:

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


不知道为什么。正如我所说,这只是require中的一个$var='stuff';情况,但显然是它导致了问题。//

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

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

    <?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

调试器的网络选项中得到的响应是什么?查看Chrome中的javascript控制台,我能看到的唯一直接响应是来自php的xhr响应,给出了我所期望的:{“result”:“Cfail”}…除非我缺少一个要查看的选项卡?单击ajax调用时显示的网络url时,只需查看输出响应。是的,我在mailprocess.php中看到的唯一响应是{“result”:“Cfail”}控制台前面显示一个红点,但是…我猜这意味着它在回显时在JSON对象之前插入了一些内容?我在下面添加了一个答案,请检查,它很可能会解决您的问题这根本不能解决问题,因为“成功”aspect从不触发。它没有到达返回=JSON.parse(returned);…JSON导致ajax错误响应,向调用添加错误选项确实会触发。但是,唯一的响应错误是{“result”:“Cfail”},这是一个成功的PHP调用应该调用的{.这是正常的,还是PHP在响应中插入的内容超出了它应该插入的范围?好的,那么在控制台上,您是否看到任何jquery错误,在成功回调触发某些jquery错误之前,有可能会阻止代码继续执行。{}您看到的是正常的,这是json编码的符号。我更新了我的问题,表明我解决了它。出于某种原因,PHP在第一个括号前放了一个空格/隐藏字符。我只是将配置要求进一步向下移动到代码中,这很好。这显然不起作用,但我只是尝试了一些方法来解决它这是随机的。显然,因为我需要一个“config”php文件来设置一些变量,然后再进行json编码,所以php在第一个括号前加了“something”。一个空格对象或其他什么。非常奇怪。:/我要更新我原来的问题来指出。
success: function(returned){
                returned = JSON.parse(returned);
                $('#loader').stop(true).fadeTo(300,0);
                if(returned.result=='Cfail'){
                    alert("I read it right!");
                }
    <?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;
         }
    ?>