2015-11-03 457 views
0

当我提交我的注册表单时,jQuery将它发送到register.php,然后返回JSON数据供jQuery使用。AJAX请求成功但没有数据可以使用

一切工作正常 - 用户获得注册。 register.php在网络响应标签中返回{"tulemus":"olemas"}

这里的问题是,尽管register.php返回的数据应该是这样的,但它不会被发送到function(data)。我甚至试着做console.log(data),并没有在控制台中显示出来,尽管在网络标签中,我可以看到.php文件成功返回数据。

Register.php:

<?php 

if(isset($_POST['username'])){ 

include_once 'db_connect.php'; 

$username = $_POST['username']; 
$password = $_POST['password']; 
$passwordconfirm = $_POST['passwordconfirm']; 

if($password == $passwordconfirm) { 

    $email = $_POST['email']; 
    $turvakysimus = $_POST['turvakysimus']; 
    $turvavastus = $_POST['turvavastus']; 

    $sql = "SELECT username FROM kasutajad WHERE username = :username"; 
    $query = $pdo->prepare($sql); 

    $query->bindValue(':username', $username); 
    $query->execute(); 

    $query->fetch(PDO::FETCH_ASSOC); 

    if($query->rowCount()){ 

     echo json_encode(array("tulemus"=>"olemas")); 
    } else { 

    if($user->register($username, $password, $email, $turvakysimus, $turvavastus)) { 
     echo json_encode(array("tulemus"=>"loodud")); 
    } 
    } 
} else { 

    echo json_encode(array("tulemus"=>"nomatch")); 
} 
} 
?> 

而jQuery的:

$(function(){ 

$("form").submit(function() { 
    event.preventDefault(); 

    var username = $('#username').val(); 
    var password = $('#password').val(); 
    var passwordconfirm = $('#password_confirm').val(); 
    var email = $('#email').val(); 
    var turvakysimus = $('#turvakysimus').val(); 
    var turvavastus = $('#turvavastus').val(); 

    $.post("register.php", 
    { 
     username: username, 
     password: password, 
     passwordconfirm: passwordconfirm, 
     email: email, 
     turvakysimus: turvakysimus, 
     turvavastus: turvavastus 
    }, 

    function(data) 
    { 
     if(data.tulemus == 'olemas') { 
      $("#resultDiv").hide().html('<div class="alert alert-danger" style="margin-top:25px;"> <strong>Viga!</strong> Sellise nimega kasutaja juba eksisteerib.</div>').fadeIn(1000); 
     } else if (data.tulemus == 'loodud'){ 
      $("#resultDiv").hide().html('<div class="alert alert-success" style="margin-top:25px;"> <strong>Kasutaja loodud!</strong> Võite nüüd sisse logida.</div>').fadeIn(1000); 
     } else if (data.tulemus == 'nomatch'){ 
      $("#resultDiv").hide().html('<div class="alert alert-danger" style="margin-top:25px;"> <strong>Viga!</strong> Teie sisestatud paroolid on erinevad.</div>').fadeIn(1000); 
     } 
    }, "json"); 
}); 
}); 
+0

你得到任何错误。你能查看浏览器的控制台吗? – vijayP

+0

浏览器控制台中没有任何内容,并且在“网络”选项卡中,您可以看到''php'''脚本正在返回JSON数据:https://gyazo.com/0660e396ac613ff15faadab4ca619707由于某种原因,jQuery没有收到该信息。 – fidtal

+1

似乎在JSON前加了一个'•'字符,并在该屏幕截图中使其无效。 – Quentin

回答

0

在Chrome中,红点通常代表不可打印的特殊的Unicode characters.Please检查你的服务器端代码,以防止那些输出字符。

如果您的文件使用UTF-8编码,最好使用UTF-8对其进行编码,而不使用BOM。这可以通过记事本++轻松完成。步骤如下:

  • 用notepad ++打开文件。
  • 转到文件菜单上的编码选项。
  • 然后选择选项“convert to UTF-8 without BOM”。

这可能会解决您的问题。

0

•{"foo":"bar"}无效的JSON。项目符号点可能由于编码而出现 - json_encode需要UTF8编码。

您可以使用类似mb_convert_encoding($string,'UTF-8','auto');之类的东西,但在PHP文档(here)的注释部分中有许多其他解决方案处理UTF8和json_encode。

+0

在开始使用类来记录/注册用户之前,它工作得很好。那么,当JSON中的文本相同时,我现在必须将其转换为UTF-8的原因是什么? – fidtal

0

提供您的功能成功响应,并得到参数“数据”为,

success:function(data) 
    { 
     if(data.tulemus == 'olemas') { 
      $("#resultDiv").hide().html('<div class="alert alert-danger" style="margin-top:25px;"> <strong>Viga!</strong> Sellise nimega kasutaja juba eksisteerib.</div>').fadeIn(1000); 
     } else if (data.tulemus == 'loodud'){ 
      $("#resultDiv").hide().html('<div class="alert alert-success" style="margin-top:25px;"> <strong>Kasutaja loodud!</strong> Võite nüüd sisse logida.</div>').fadeIn(1000); 
     } else if (data.tulemus == 'nomatch'){ 
      $("#resultDiv").hide().html('<div class="alert alert-danger" style="margin-top:25px;"> <strong>Viga!</strong> Teie sisestatud paroolid on erinevad.</div>').fadeIn(1000); 
     } 
    }, 
相关问题