2015-11-03 69 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); 
     } 
    }, 
相關問題