2014-10-23 6 views
1

Я пытаюсь создать базовую форму AJAX. Я хочу получить строку текста для отображения после успеха формы PHP через AJAX, но при отправке формы я просто направляюсь в файл PHP. Может ли кто-нибудь определить проблему, чтобы текст отображался на одной странице при успешном завершении регистрации?Проблема с получением формы AJAX для работы

код ниже:

HTML JS PHP

в порядке:

$(document).ready(function() { 
 
    $(".loginform").submit(function() { 
 
     var username = $('input[id=username]').val(); 
 
     var password = $('input[id=password]').val(); 
 
     $.ajax({ 
 
      type: "POST", 
 
      url: "login.php", 
 
      data : "username="+username+"&password="+password, 
 
      type: "POST", 
 
      success: function (data) { 
 
       var success = data['success']; 
 
       if(success == false){ 
 
        var error = data['message']; 
 
        alert(error); 
 
       } 
 
       if(success == true) { 
 
        $('#result').write('Login success! Loading dashboard...');         
 
       } 
 
      } 
 
     });   
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<p> 
 
Please log in: 
 

 
<form name="loginform" class="loginform" method="post" action="login.php"> 
 
Username: <input name="username" id="username" /><br /> 
 
Password: <input name="password" id="password" /><br /> 
 
<input name="submit" type="submit" /> 
 
</form> 
 
</p> 
 

 
<p> 
 
<div id="result"> 
 

 
</div> 
 
</p>

+0

К сожалению PHP код здесь: Kaostherom

+1

Правильно отредактируйте ваш вопрос и добавьте PHP-код. – Styphon

ответ

1

Вам необходимо вернуть значение false для предотвращения отправки формы. Кроме того, вы дважды объявили тип: «POST», и данные больше похожи на запрос $ _GET. Я изменил код ниже.

$(document).ready(function() { 
     $(".loginform").submit(function() { 
      var username = $('input[id=username]').val(); 
      var password = $('input[id=password]').val(); 
      $.ajax({ 
       type: "POST", 
       url: "login.php", 
       data : { 
        username : username, 
        password: password 
       }, 

       success: function (data) { 
       var success = data['success']; 
        if(success == false){ 
         var error = data['message']; 
         alert(error); 
        } 
        if(success == true) { 
         $('#result').write('Login success! Loading dashboard...'); 
        } 
       } 

      }); 
      return false; 
     }); 
    }); 
+0

+1 для правильного формата данных в POST по сравнению с OP, который выглядит как сериализованные данные для запроса GET –

+0

Спасибо, работал как Шарм! – Kaostherom

+0

Добро пожаловать! – baao

1

Проверьте это похоже один: event.preventDefault doesn't seem to work

TLDR Ответ: Вы должны просто return false;, чтобы предотвратить представление PHP формы в функции обратного вызова для onSubmit события:


Для улучшения Код:

Пожалуйста, используйте правильный отступ для большей ясности и не стесняйтесь следить за комментариями по некоторым предложениям по улучшению;). Дайте мне знать, если вам нужны какие-либо дополнительные разъяснения :)

JQuery:

$(document).ready(function() { 
     $(".loginform").submit(function (event) { 
      // the proper way would be 
      //var username = $('input#username').val(); 
      //var password = $('input#password').val(); 
      var username = $('input[id=username]').val(); 
      var password = $('input[id=password]').val(); 
      $.ajax({ 
       type: "POST", 
       url: "login.php", 
       //based on michael's post it should be 
       //data: {username: username, password: password}, 
       data : "username="+username+"&password="+password, 
       //type: "POST", <-- not needed based on michael's post 
       success: function (data) { 
         var success = data['success']; 
         //probably needs to be success==="false" and I suggest 
         //not to use success name again in there.. 
         if(success == false){ 
          var error = data['message']; 
          alert(error); 
         } 
         // probably should be just else{ or else if(success==="true") 
         // I would check it first in the if because usually you will 
         // have a success more often than a failure 
         if(success == true) { 
          //based on Styphon's answer there is no write so it should be 
          //one of: append(element), prepend(element), text("content") or html("content") 
          $('#result').write('Login success! Loading dashboard...');         
         } 
       } 

      }); 
      // return false is like calling event.preventDefault(); and event.stopPropagation(). 
      //As such prevents redirection to PHP/Server code */ or in other words it WON'T 
      //submit the form to PHP using the name=" " input attributes 
      //and method=" "/action=" " attributes in your form tag 
      return false;   
     }); 
}); 

HTML

Если вы отправляете форму только через AJAX, а не по-старому, то только вы нужно, что у меня есть. Некоторые предложения:

  • не используют <br/> использовать позиционирование CSS
  • в качестве альтернативы вы можете использовать <button class="someclass">value</button> вместо <input type="submit"/> и в JavaScript вы могли бы сделать $("button.someclass").click(function(event){ blabla }) вместо $(".loginform").submit(function(event){blabla}); , но не забывайте return false;
<p> 
Please log in: 
<form class="loginform"> 
    Username: <input id="username" /><br /> 
    Password: <input id="password" /><br /> 
    <input name="submit" type="submit" class="someclass" /> 
</form> 
</p> 

<p> 
<div id="result"> 

</div> 
</p> 

PHP:

ВАЖНО: никогда не храните пароли в текстовом виде в вашей базе данных (например, для производства). Используйте некоторое хеширование (MD5/SHA-1) и сравните входные данные пользователя с тем, что он содержится в хэшировании базы данных (см. Подробности: How do I create and store md5 passwords in mysql). Btw даже этого не достаточно, и вы должны также использовать соления, прежде чем хэширования ..

например:

$hashedpass = hash('sha256', $pass); 
$query = "select * from user where name = '$escapedName' and password = '$hashedpass'; "; 
+0

Независимо от того, насколько это вам больно, рекомендации, которые выходят за рамки вопроса, не должны отвечать :(Может быть, комментарий к исходному вопросу. – yerforkferchips

+1

meh - Я поставил TLDR .. и я не согласен. Важно дать хорошее предложение, так что менее плохой код подкрепляется путем обмена. Я думаю, что это то, что codereview пытается сделать, но это бета-версия. Я отделил его немного больше, поэтому теперь прокрутка не должна быть проблема .. мы не ленивы :) –

+1

Я отделил ее немного больше - так что теперь прокрутка не должна быть проблемой .. мы не ленивы :) - Я не мог исправить все проблемы синтаксиса в предыдущем комментарии: P но ну хорошо –

0

Проблема в том, что вы не останавливая форму от представления, поэтому после того, как она работает Ajax форма продолжается, как обычная форма.Чтобы остановить это, просто return false в конце вашей функции.

$(document).ready(function() { 
    $(".loginform").submit(function() { 
     var username = $('input[id=username]').val(); 
     var password = $('input[id=password]').val(); 
     $.ajax({ 
      type: "POST", 
      url: "login.php", 
      data : "username="+username+"&password="+password, 
      type: "POST", 
      success: function (data) { 
       var success = data['success']; 
       if(success == false){ 
        var error = data['message']; 
        alert(error); 
       } 
       if(success == true) { 
        /* There is no .write function, you either want .append() to 
        add text on to the end, or to replace the contents .text() 
        or .html(). In this case I would use .text() */ 
        $('#result').text('Login success! Loading dashboard...'); 
       } 
      } 
      return false; /* <-- returning false here stops the form submitting. */ 
     });   
    }); 
}); 
+0

Со всем уважением, я уже ответил на это, я верю за 7 минут до вас .. –

+0

Возможно, это потому, что я был занят форматированием всего его кода, не говоря уже о том, что вам не удалось объяснить *** почему *** вам нужно return false. Люди узнают больше, если вы объясните, почему им нужно что-то делать, а не просто дать им ответ. – Styphon

+0

Вы делаете пари, что я сказал, что возвращаю ложь; означает вызов event.preventDefault(); и event.stopPropagation(), у меня просто не было комментариев для этого. Вы можете видеть это в ссылке, которую я опубликовал, которая также является моим принятым ответом. Кроме того, я говорил о формате данных, если условия и duplicate type = "POST" –

0

Это может быть не ваша проблема, но FWIW:

В вашем блоке кода Ajax, вы отправляете данные на login.php. Вы не указали имя страницы, на которой находится исходный код ajax - если это login.php, вы получите описание, которое вы описываете.

По дизайну AJAX следует опубликовать на внешний (отдельный) PHP-файл. Есть способ опубликовать AJAX на той же странице, но для этого требуется настройка (спросите Феликса Клинга, он знает, как это сделать).

См. Этот ответ для получения дополнительной информации.

values not updated after an ajax response

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