2016-02-24 3 views
0

У меня есть функция javascript, которая отправляет контроллеру некоторую информацию (в основном, такие как vars, как массивы и идентификаторы), которая должна быть вставлена ​​в таблицу, проблема в том, что вставка завершена. Я хочу вернуться на другую точку зрения с массивом данных, и я не могу показаться, чтобы сделать это (я думаю, что его из-за запроса Ajax)Laravel 5.2 - Обратный просмотр с контроллера после запроса ajax

Javascript Код

$('#importar').submit(function(e) { 
     e.preventDefault(); 
      fdata=preparePostData(); 
     $.ajax({ 
      type:'POST', 
      url: $(this).prop('action'), // url, from form 
      data:fdata, 
      processData: false, 
      contentType: false, 
      success:function(data) { 
       window.location.replace(data.url); 
      } 
     }); 
    }); // end form.submit 

Функция Prepare PostData()

var file_data=$('input:file')[0].files; 
     var postdata=new FormData(); 
     postdata.append('_token',token); 
     postdata.append('startFrom',startFrom); 
     postdata.append('idList',idList); 
     postdata.append('nomeCampos',nomeCampos); 
     postdata.append('posicaoCampos',posicaoCampos); 
     postdata.append('file',file_data[0]); 
     return postdata; 

контроллер Ожидаемый код ли все вставки и функции и в конце концов

$data = array('listNome' => $listName, 'contacts' => $contacts, 'errors' => $erro); 
     return view("XPTO", $data); 

ответ

0

решаемые

Не самое элегантное решение, но то, что я был установлен массив с ошибками в качестве переменной сеанса и получить, что сеанс вар в конкретном контроллере мне нужно.

Контроллер

$request->session()->put('importErrors',$erro); 
     $response = array('status' =>'success','url' => '/ListarContactos/'.$idList); 
     return response()->json($response); 

JavaScript

$('#importar').submit(function(e) { 
     e.preventDefault(); 
      fdata=preparePostData(); 
     $.ajax({ 
      type:'POST', 
      url: $(this).prop('action'), // url, from form 
      data:fdata, 
      processData: false, 
      contentType: false, 
      success:function(data) { 
       if(data.status=='success'){ 
        window.location.replace(data.url); 
       } 

      } 
     }); 
    }); // end form.submit 

XPTOController

$errorArray= $request->session()->get('importErrors'); 

После использования вы можете уничтожить переменную сеанса или сохранить ее (в зависимости от того, нужна она вам или нет).

1

Вы не должны возвращать вид из вызова Ajax, потому что вы получите представление обрабатывается код как параметр для обратного вызова ajax. Подумайте о вызове ajax в качестве вызова async «за кадром» на сервер, на котором вы передаете параметры и получите некоторые другие параметры.

Вместо этого вы должны вернуть ответ JSON от контроллера со всеми параметрами, которые вам понадобятся для вызова маршрута из JS и разбора его в обратном вызове success. Например:

контроллер

//here you should store all the parameters you need in your JS calback 
$data = array('status' => 'ok', 'url' => $redirect_url); 

JS

success:function(data) 
{ 
    //data will contain the parameters you set in the controller, so you can use them to call the route 
    if (data.status == 'ok') 
     window.location.replace(data.url); 
} 
+0

Что относительно варов с контроллера? –

+0

вы также можете вернуть их и вызвать маршрут от JS, передавая эти переменные – Moppo

+0

, так что примерно так: Контроллер -> $ response = array ('status' => 'ok', 'url' => '/ ListContacts /'. $ иМЯ_СПИСКА '/' $ контакты '/' $ Эрро)....; return response() -> json ($ response); и какой файл маршрута получает эти параметры? –

0

Просто разработки предыдущий ответ, контроллеры вызова Ajax используются для подачи некоторых данных за кулисами и стандартные контроллеры используется для управления представлением, поэтому наилучшей практикой является возврат данных (JSON) из Ajax-контроллера в тот же вид, который req вложенные данные. в то время как стандартный контроллер должен использоваться для управления представлениями.

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