2015-11-03 3 views
0

Когда я отправляю свою регистрационную форму, jQuery отправляет ее в register.php, который затем возвращает данные JSON для используемого jQuery.Запрос AJAX успешно, но данные не могут быть использованы

Все работает нормально - пользователь регистрируется. Регистр.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, красные точки, как правило, представляют собой непечатаемых специальный юникода characters.Please проверить на стороне сервера код для предотвращения вывода тех персонажи.

Если ваши файлы кодируются UTF-8, лучше их кодировать с помощью UTF-8 без спецификации. Это можно легко сделать с помощью блокнота ++. Этапы заключаются в следующем:

  • Откройте свои файлы в блокноте ++.
  • Перейдите к опции Кодировка в меню файла.
  • Затем выберите вариант «конвертировать в UTF-8 без спецификации».

Это может решить вашу проблему.

0

•{"foo":"bar"} недействителен JSON. Вероятность появления маркера из-за кодировки - json_encode требует кодировки UTF8.

Вы можете использовать что-то вроде mb_convert_encoding($string,'UTF-8','auto');, но есть множество других решений, касающихся UTF8 и json_encode в разделе комментариев документации PHP (here).

+0

Он работал отлично, прежде чем я начал использовать класс для регистрации/регистрации пользователя. Итак, почему я теперь должен преобразовать его в UTF-8, когда текст внутри JSON одинаковый. – 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); 
     } 
    }, 
Смежные вопросы