2015-03-01 8 views
0

Здравствуйте У меня возникли проблемы с моей просьбой AJAX в Laravel, он возвращает эту ошибкуLaravel, Ajax запрос

"Symfony\Component\HttpKernel\Exception\NotFoundHttpException" 

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

в моих маршрутах

Route::post('admin/email', array(
      'uses' => '[email protected]_submit', 
      'as' => 'email_submit' 
      )); 

Контроллер

public function email_submit() 
    { 
      $validator = Validator::make(
       array('content' => Input::get('message')), 
       array('content' => 'required|min:10') 
      ); 

      if ($validator->fails()){ 
       return Response::json([ 
        'success'=>false, 
        'error'=>$validator->errors()->toArray() 
        ]); 
      } 

      return Response::json(['success'=>true]); 
} 

В моих взглядов.

@section('errors') 
    <div class="container"> 
     <div class="row"> 
      <div class="col-lg-12"> 
       <div class="alert alert-info info" style="display:none;"> 
        <ul> 
        </ul> 
       </div> 
      </div> 
     </div> 
    </div> 

@stop 

@section('content') 
<div> 
    {{Form::open(array('method' => 'post'))}} 
     {{Form::label('Subject')}} 
     {{Form::text('subject', null , array(
     'placeholder' => 'Subject', 
     'class' => 'form-control' 
     ))}}<br> 

     {{Form::label('Message')}} 
     {{Form::textarea('message', null , array(
     'placeholder' => 'Write here..', 
     'class' => 'form-control', 
     'id' => 'message' 
     ))}} 
     <br> 

     {{Form::submit('Send Email', array(
     'class' => 'btn btn-primary' 
     ))}} 
    {{Form::close()}} 
</div> 
@stop 

<script> 
     $(document).ready(function(){ 

      var info = $('.info'); 

      $('form').submit(function(e){ 
       e.preventDefault(); 

       var formData = new FormData(); 
       formData.append('message',$('#message').val()); 

       $.ajax({ 
        url:'email', 
        method:'post', 
        processData:false, 
        contentType:false, 
        cache:false, 
        dataType: 'json', 
        data: formData, 
        success:function(data){ 
         info.hide().find('ul').empty(); 
         if(!data.success){ 
          $.each(data.errors,function(index, error){ 
           info.find('ul').append('<li>'+error+'</li>'); 
          }); 
          info.slideDown(); 
         }else{ 
          info.find('ul').append('<li>ITS WORKING</li>'); 
          info.slideDown(); 
         } 
        }, 
        error:function(){} 

       }); 

      }); 

     });  
    </script> 

Я надеюсь, что кто-то может помочь мне понять, почему я получаю эту ошибку, и приложение не работает. Благодаря

+0

на каком URL вы показываете форму с помощью Ajax вызова – user3714582

ответ

0

Ваш Аякса URL отправляет данные /электронной почты, но ваш маршрут настроен на /администратора/электронной почты. Выберите тот или другой. попробуйте

$.ajax({ 
    url:'/admin/email', 
    ... 
+0

я попытался это один, но все еще получает ошибку –

+0

@seanarce попробуйте добавить слэш:?. 'URL: '/ администратор/email'' – user3714582

+0

@ seanarce, на этот раз у вас другая ошибка. опубликуйте эту ошибку. – itachi

0

Одна из многих интересных функций в Laravel является автоматической защитой CSRF, поэтому, когда вы пытаетесь получить доступ к защищенным маршрутам через AJAX вы получите ошибку TokenMismatchException. Таким образом, в дополнение к тому, что было сказано @kaspars, вы также хотите ...

Добавить новый мета-тег в головной части макета

<meta name="_token" content="{{ csrf_token() }}" /> 

Скажите JQuery, чтобы передать маркер при каждом вызове AJAX.

$(function() { 
    $.ajaxSetup({ 
     headers: { 
      'X-CSRF-Token': $('meta[name="_token"]').attr('content') 
     } 
    }); 
    }); 

Скажите Laravel, что если запрос был отправлен через AJAX, чтобы искать маркер в заголовках и выдаст ошибку, если указанный маркер не соответствует.

Route::filter('csrf', function() { 
    $token = Request::ajax() ? Request::header('X-CSRF-Token') : Input::get('_token'); 
    if (Session::token() != $token) throw new Illuminate\Session\TokenMismatchException; 
}); 

Подробнее на Laravel 4 – CSRF Tokens When Using jQuery’s AJAX

0

"Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException"

означает, что адрес неправильный лучший способ эхо URLs в Laravel является { {URL :: to ('email_submit')}}, так как вы назвали свой маршрут «email_submit». поэтому код Ajax должен быть таким:

$ .ajax ({

URL: "{{URL :: к ('email_submit')}}",

отмечают, что там должно быть цитаты

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