2013-02-28 2 views
2

Я работаю над простым блого-приложением с Symfony2.
Я хотел бы проверить Логин-данные через AJAX:Symfony2: запрос JQuery не XHR

  • если данные верны -> вперед на другую страницу
  • если нет -> реагировать с 400 статусом и живой форме

Моя проблема заключается в том, что запрос, отправляемый JQuery, кажется, не является XHR.

Html:

<form id="logfo" action="{{path('Login_Ajax')}}" method="POST"> 
    <p> Name </p> 
    <input type="text" id="logname"> </br> 
    <p> Password </p> 
    <input type="text" id="logpass"> </br> 
    <input type="submit" value="Log In"> 
</form> 

Javascript:

$(document).ready(function() { 
    //listen for the form beeing submitted 
    $("#logfo").submit(function(){ 
     var url = $("#logfo").attr("action"); 
     //start the post 
     $.post(url,{Name:$("#logname").val(), 
      Password:$("#logpass").val()}, 
      function(data){ 
       if(data.responseCode==400) { 
        //animate the Form 
        var fo=$("#logfo"); 
        fo.animate({left:'+=25px'}, "fast"); 
        fo.animate({left:'-=50px'}, "fast"); 
        fo.animate({left:'+=50px'}, "fast"); 
        fo.animate({left:'-=25px'}, "fast"); 
       } 
     }); 
    }); 
}); 

routing.yml:

Login_Ajax: 
pattern: /thefitthing/logjax 
defaults: {_controller: FitcompTheFitThingBlogBundle:Ajax:login } 
requirements: 
    _method: POST 

В целях тестирования, я заменил код для сравнения запроса с данными
из базы данных с простыми if-условиями.
контроллер:

class AjaxController extends Controller { 

    public function logInAction() 
    { 
     $request = $this->getRequest(); 
     if ($request->isXmlHttpRequest()) { 
      $name=$request->request->get('Name'); 
      if($name == "page") return new Response("",400); 
      if($name == "plant") return $this->redirect($this->generateUrl('Thanks_Page')); 
     } 
     else return $this->render('FitcompTheFitThingBlogBundle:Blog:test.html.twig', array('hint' => "noXHR")); 
    } 
} 

ответ

4

Вашего submit обработчик не мешает браузер от отправки формы, поэтому ваш запрос XHR не имеет шанса закончить (браузер просто делает регулярный POST первым). Вы можете подтвердить это, просто удалив свой вызов $.post - не будет никакой разницы в поведении вообще.

Устранить предотвращая действие по умолчанию:

$("#logfo").submit(function(event) { 
    event.preventDefault(); 
    $.post(...); 
}); 
+0

Я изменил его, но теперь я не могу отправить форму ни – Simeon

+0

@Simeon: Я извиняюсь, я не понимаю, что вы имеете в виду. Пожалуйста, будьте более конкретными. – Jon

+0

Когда я нажимаю кнопку «Отправить», ничего не происходит – Simeon

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