2016-01-21 3 views
1

У меня есть метод post ajax, который, если успех будет предупреждать, что «аккаунт успешно создан». моя проблема в том, когда она не создана, она должна предупредить, что учетная запись уже существует, но какая проблема она все же предупреждает об этом.Ajax не удалось получить результат не отголоски

код сценария:

$(document).ready(function(){ 

    $("#btn-register").click(function(){ 
     var regaccount = $("#regaccount").val(); 
     var regpass = $("#regpass").val(); 

     if((regaccount == "") || (regpass == "")){ 
      alert("Information required!"); 
     }else { 
      $.ajax({ 
      type: "POST", 
      url: "register.php", 
      data: "regaccount="+regaccount+"&regpass="+regpass, 
      success: function(data){  
       alert("account successfully created!"); 
      }, 
      error:function(){ 
       alert("account already exists"); 
      } 
      }); 
     } 
     $("#regaccount").val(''); 
     $("#regpass").val(''); 
     return false; 
    }); 
}); 

register.php

<?php 
    include 'function.php'; 
    session_start(); 
    ob_start(); 
    $userid = rand(100000, 999999); 
     $regaccount = $_POST['regaccount']; 
     $regpass = $_POST['regpass']; 

     $regaccount = stripslashes($regaccount); 
     $regpass = stripcslashes($regpass); 
     $salt = "dctech2015ABcRXd"; 
     $regpass = md5($regpass) . $salt; 
     $regpass = sha1($regpass); 

     $con = new Functions(); 
     $con = $con->db; 

     $stmt = $con->query("SELECT * FROM users WHERE username = '$regaccount'"); 

     $count = $stmt->rowCount(); 

     if($count != 1){ 
      $con = new Functions(); 
      $con = $con->db; 
      $status="Offline"; 
      $stmt = $con->prepare("INSERT INTO users(user_id, username, password, status)VALUES(:userid, :account, :password, :status)"); 
      $stmt->bindValue(':userid', $userid); 
      $stmt->bindValue(':account', $regaccount); 
      $stmt->bindValue(':password', $regpass); 
      $stmt->bindValue(':status', $status); 
      $stmt->execute(); 
     }else{ 
      echo '<script>alert("account name already exists");</script>'; 
     } 

    ob_end_flush(); 
?> 
+1

Потому что вы не возвращаете никаких ошибок. Вы просто эхо-сообщение в файл register.php ....... alert (data); ......... и проверьте, что произойдет ... Я думаю, что это всегда подпадает под sucessfull –

+0

Ответ на ошибку $ .ajax() 'используется для указания ошибки в ответе заголовка на сервере. Это ** не ** оценивает возврат условного оператора из вашего PHP-скрипта. Вместо этого вы должны возвращать объект json со статусом или что-то, что вы можете условно наблюдать в функции успеха обратного вызова ajax. – Ohgodwhy

+0

Возвращаемое сообщение в соответствии с register.php ..... Я имею в виду, если запись записана, а затем вернется (эхо «успех»), и если запись существует, то верните (эхо »существует) .... затем проверьте в своем javascript то, что попадает под данные и предупреждение на основе данных –

ответ

1

Вам необходимо сделать следующие изменения, чтобы сделать эту работу:

1) В вашем PHP кода, не пишите какой-либо оповещения.

2) Если пользователь существует в базе данных или недавно вставлен, запрос AJAX будет извлекать только данные. Мы должны справиться с логикой.

3) Метод AJAX error будет вызываться только в случае отказа запроса AJAX (либо запрос не отправлен, либо статус ответа не 200 OK).

4) В вашем случае метод error никогда не будет вызываться, если пользователь уже существует или даже пользователь вставлен, поскольку данные корректно переносятся с JavaScript на PHP.

if($count != 1){ 
    $con = new Functions(); 
    $con = $con->db; 
    $status="Offline"; 
    $stmt = $con->prepare("INSERT INTO users(user_id, username, password, status)VALUES(:userid, :account, :password, :status)"); 
    $stmt->bindValue(':userid', $userid); 
    $stmt->bindValue(':account', $regaccount); 
    $stmt->bindValue(':password', $regpass); 
    $stmt->bindValue(':status', $status); 
    $stmt->execute(); 
    echo 'success'; 
} 
else{ 
    echo 'exists'; 
} 

И

$.ajax({ 
    type: "POST", 
    url: "register.php", 
    data: "regaccount="+regaccount+"&regpass="+regpass, 
    success: function(data){  
    if (data == 'success') { 
     alert("account successfully created!"); 
    } 
    else if (data == 'exists') { 
     alert("account already exists"); 
    } 
    }, 
    error:function(){ 
    alert("Unknown problem occured."); 
    } 
}); 
+0

Спасибо за помощь sir @Pupil :) – DumDumDummy

+0

@DumDumDummy, спасибо. – Pupil

0

Здесь вы пытаетесь подсказывать сообщение в AJAX раздел ошибок, который является неправильным. Вам нужно обрабатывать оба раздела успеха.

Самый простой пример: вернуть $count и проверить это значение, если значение больше 0 означает, что запись существует.

Изменения в register.php код:

if($count != 1){ 
    $con = new Functions(); 
    $con = $con->db; 
    $status="Offline"; 
    $stmt = $con->prepare("INSERT INTO users(user_id, username, password, status)VALUES(:userid, :account, :password, :status)"); 
    $stmt->bindValue(':userid', $userid); 
    $stmt->bindValue(':account', $regaccount); 
    $stmt->bindValue(':password', $regpass); 
    $stmt->bindValue(':status', $status); 
    $stmt->execute(); 
} 
echo $count; 

я удалить еще часть, которая не требует. И используйте $count для ответа AJAX.

И внести изменения в себе соответствующих AJAX части также:

$.ajax({ 
    type: "POST", 
    url: "register.php", 
    data: "regaccount="+regaccount+"&regpass="+regpass, 
    success: function(data){ 
     //If record exist... 
     if(data > 0){ 
     alert("account name already exists"); 
     } 
     else { 
     alert("account successfully created!"); 
     } 
    }, 
    error:function(){ 
     alert("There is some error, Please try after some time OR contact site admin."); 
    } 
}); 

Надеется, что это очень легко понять и помочь другому пользователю также.

Смежные вопросы