Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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 &引用;“输入意外结束”;对于JSON回调-从echo(只有两行空行)和错误调用中什么也没有得到_Javascript_Php_Jquery_Ajax_Json - Fatal编程技术网

Javascript &引用;“输入意外结束”;对于JSON回调-从echo(只有两行空行)和错误调用中什么也没有得到

Javascript &引用;“输入意外结束”;对于JSON回调-从echo(只有两行空行)和错误调用中什么也没有得到,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,我一直在尝试为我正在建设的网站创建一个注册系统 我已经完成了所有的注册过程,但是如果出现错误或没有错误,我无法从服务器上得到响应 数据通过jQuery ajax发送到PHP,数据正在被精确地处理,但存储在索引数组中的处理结果不会被发回-,因为它似乎是一个坏的JSON对象。 我已经搜索了很多关于为什么会发生这种情况,但我找不到一个正确的答案。为什么会这样 代码如下: 通过Jquery从html捕获数据: var frm= $('#formreg'); frm.submit(function(ev

我一直在尝试为我正在建设的网站创建一个注册系统

我已经完成了所有的注册过程,但是如果出现错误或没有错误,我无法从服务器上得到响应

数据通过jQuery ajax发送到PHP,数据正在被精确地处理,但存储在索引数组中的处理结果不会被发回-,因为它似乎是一个坏的JSON对象。

我已经搜索了很多关于为什么会发生这种情况,但我找不到一个正确的答案。为什么会这样

代码如下:

通过Jquery从html捕获数据:

var frm= $('#formreg');

frm.submit(function(ev){
    $.ajax({
        type:frm.attr('method'),
        url: frm.attr('action'),
        dataType: 'json',
        data: frm.serialize()
    }).done(function(data){
        console.log(data);
        alert('Success!');
    }).error(function(xhr, status, error){
        console.log(status,error);
    }).complete(function(xhr, status){
        console.log(status);
    });
    ev.preventDefault();
});
注意“完成”、“错误”和“完成”中的调试行,这是我在某个地方看到的建议,我得到了控制台日志:

parsererror SyntaxError{stack:(…),消息:“输入意外结束”}

这是正在处理它的php:

<?php

ob_start();
// Valor nulo para as variaveis antes de iniciar
$username = $password = $nome = $email = $codreg = "";
$host = "localhost"; // Nome do Host
$dbuser = "root"; // Mysql username 
$dbpass = ""; // Mysql password 
$db_name = "usuarios"; // Database name 
$tbl_name = "usuarios"; // Table name
$code_tbl = "codigos";
$returnData = array('success' => false);
$errors = array();
$recieved;

mysql_connect("$host", "$dbuser", "$dbpass")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = test_input($_POST["username"]);
    $password = test_input($_POST["password"]);
    $nome = test_input($_POST["nome"]);
    $email = test_input($_POST["email"]);
    $codreg = test_input($_POST["codReg"]);
}

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    $data = mysql_real_escape_string($data);
    return $data;
}

$sql = "SELECT * FROM $tbl_name WHERE username='$username'";
$result = mysql_query($sql);
if (mysql_num_rows($result) != 0) {
    $errors['username'] = 'Nome de usuário já existente.';
}

$sqlcode = "SELECT * FROM $code_tbl WHERE codigo='$codreg'";
$resultcode = mysql_query($sqlcode);
if (mysql_num_rows($resultcode) == 0) {
    $errors['codigo'] = 'Código de registro não encontrado.';
}
if (!empty($errors)) {
    $returnData['success'] = false;
    $returnData['errors'] = $errors;
} else {
    $returnData['success'] = true;
    $insert = "INSERT INTO $tbl_name (username, senha, nome, email)
            VALUES ('$username', '$password','$nome','$email')";
    mysql_query($insert);
}
header('Content-Type: application/json');
echo json_encode($returnData);

ob_end_clean();

?>

问题在于您对输出缓冲区的使用

该方法将丢弃缓冲区的内容,因此基本上您的脚本将结束,而不会在响应中发送任何内容。从脚本的外观来看,您完全不能安全地使用缓冲区。只需从开头删除ob_start(),从结尾删除ob_end_clean()


如果您的代码中有更多内容确实需要使用缓冲区,请在关闭缓冲区之前查看以获取输出,或者在一次调用中关闭缓冲区并输出其内容。

您可能需要查看,
json
响应是什么样子的?以及:堆栈非常重要,请展开它,并找出错误发生的地方。将您的done/error/complete更改为
console.log(“done:”,data)
console.error(“ajax调用的错误”,data)
和console.log(“没有出错”)`或其他一些作为旁注的内容。请不要使用mysql扩展。使用mysqli或PDO。谢谢,我会检查一下,然后返回答案-我使用ob方法是为了尽量不让任何人读取和解密我的代码(我想习惯它,所以当我开始真正编码时,我已经知道如何)。这很有道理,让我试试。测试一下!就在现场!现在要学习如何使用get_内容和end_刷新!谢谢你和所有帮助过我的人!