AJAX请求成功但无法使用数据

时间:2015-11-03 12:27:07

标签: javascript php jquery ajax

当我提交我的注册表单时,jQuery将它发送到register.php,然后返回要使用的jQuery的JSON数据。

一切正常 - 用户注册。 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");
});
});

3 个答案:

答案 0 :(得分:0)

在Chrome中,红点通常代表不可打印的特殊unicode字符。请检查服务器端代码以防止输出这些字符。

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

  • 在记事本++中打开文件。
  • 转到文件菜单上的编码选项。
  • 然后选择“转换为无BOM的UTF-8”选项。

这可能会解决您的问题。

答案 1 :(得分:0)

•{"foo":"bar"}不是有效的JSON。子弹点可能由于编码而出现 - json_encode需要UTF8编码。

你可以使用类似mb_convert_encoding($string,'UTF-8','auto');的东西,但是在PHP文档(here)的评论部分还有很多其他解决方案来处理UTF8和json_encode。

答案 2 :(得分:0)

将您的功能作为成功响应提供,并将参数'data'作为

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);
        } 
    },