Javascript &引用;“输入意外结束”;对于JSON回调-从echo(只有两行空行)和错误调用中什么也没有得到
我一直在尝试为我正在建设的网站创建一个注册系统 我已经完成了所有的注册过程,但是如果出现错误或没有错误,我无法从服务器上得到响应 数据通过jQuery ajax发送到PHP,数据正在被精确地处理,但存储在索引数组中的处理结果不会被发回-,因为它似乎是一个坏的JSON对象。 我已经搜索了很多关于为什么会发生这种情况,但我找不到一个正确的答案。为什么会这样 代码如下: 通过Jquery从html捕获数据: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
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_刷新!谢谢你和所有帮助过我的人!