Динамическая вставка HTML в представление через AJAX с помощью JS Array в LARAVEL

#javascript #php #jquery #ajax #laravel

#javascript #php #jquery #ajax #ларавель #laravel

Вопрос:

Привет, я новичок в Laravel, у меня такая ситуация: у меня есть HTML-форма и я загружаю некоторый HTML, например «partial.blade.php » использование AJAX в той же форме, которая отлично работает со статическим HTML, но,

Я хочу отправить массив объектов JS с AJAX-запросом для динамической загрузки HTML-контента, например: Выпадающий список в той же форме

Может ли кто-нибудь подсказать мне, как я могу передать массив JS в этот фрагмент HTML, чтобы я мог отобразить этот массив в «partial.blade.php «

вот мой код

это основная форма HTML amp; Array, которую я хочу передать с этим AJAX-запросом

 var dataArray = $('#data1').val();
  

код, наконец, включен в страницу формы HTML

 $.ajax({                
            url: "add-property/residential",
            type: 'GET',
            dataType: 'html',
            data: { dataArr: dataArray },
            contentType: false,
            processData: false,
            success: function(response) {
                console.log(response);
                $('#dynamicForm').html(response);
                //alert(response);
            },
            error: function(response) {
                console.log(response);
                alert('Error....!');
            }
        });
  

вот мой маршрут

 Route::any('admin/add-property/residential',function() { return view('admin.residential'); });
  

все, что я хочу получить, это JS-массив в этом фрагменте HTML, который динамически загружается

Комментарии:

1. Массив Js в HTML?!!

2. Я более чем уверен, что var dataArray = $('#data1').val(); это, должно быть, возвращает строку. Даже если бы это был массив json в php, он все равно остается строкой после добавления к входным данным value . Вы пробовали использовать JSON.parse() для преобразования его в JSON?

3. Спасибо за ваш ответ, но пока я не пробовал этот подход

4. только вы поняли мою точку зрения, что я на самом деле хочу сделать

5. пожалуйста, не могли бы вы привести мне пример

Ответ №1:

Когда вы хотите вернуть содержимое view() в AJAX-запрос, вы можете сохранить представление как переменную и вернуть в ответе JSON:

 public function apiResponse(){
  $html = view("admin.residential")->render();

  return response()->json(["html" => $html]);
}
  

В вашем AJAX-запросе вы можете получить доступ к этому как response.html :

 success: function(response) {
  $("#dynamicForm").html(response.html);
}
  

Чтобы передать переменную из AJAX в представление, вы можете использовать request объект. В верхней части вашего routes/api (или routes/web.php , что бы вы ни использовали) добавьте use IlluminateHttpRequest; , затем в вашем маршруте введите это в функцию:

 <?php
use IlluminateHttpRequest;
...
Route::any('admin/add-property/residential',function(Request $request){ 
  ...
});
  

Это $request недоступно, вы можете получить доступ к данным, отправляемым в AJAX-запросе через $request->input("dataArr"); , и передать их в view partial с помощью ->with(); :

 Route::any('admin/add-property/residential',function(Request $request){ 

  $dataArr = $request->input("dataArr");
  $html = view("admin.residential")->with(["dataArr" => $dataArr])->render();

  return response()->json(["html" => $html]);
});
  

Комментарии:

1. Я действительно ценю ваш ответ, но на самом деле у меня есть некоторая серверная переменная в частичном HTML, когда я загружаю этот HTML с помощью AJAX Server Response Неопределенные переменные

2. чтобы преодолеть эту проблему, я хочу отправить эту серверную переменную массива через Ajax, чтобы при загрузке частичного html я также хотел снова получать эту переданную переменную массива

3. можете ли вы указать мне, как получить переменную массива, отправленную из AJAX при закрытии маршрута, и перейти к частичному представлению

4. еще раз спасибо за ваше время, я только что узнал, как поместить все view в одну переменную, чтобы уйти. Я только что исправил свою проблему, удалив «ProcessData: false» из AJAX, теперь я двигаюсь вперед.

Ответ №2:

Согласно этому

Вместо return view('admin.residential');

Вам нужно сделать это: return (string) View::make('admin.residential');

Редактировать

Если вы хотите получать данные из ajax, а затем загружать представление, вы могли бы сделать что-то вроде этого:

Импортируйте Request .

use IlluminateSupportFacadesResponse;

Сделайте так, чтобы ваша механическая ссылка указывала на определенный method на controller .

Route::any('admin/add-property/residential',"YourController@returnView");

Сделайте так, чтобы вы function обрабатывали данные

 public function returnView(Request $request){
    $data = $request->all(); // Here you will have all the data you send via AJ
    //Make sure the $data has all the necessary parameter to load the view
    $view = View::make('my_view', $data);//Here you will pass the data to the view
    return response()->json(["html" => $$view->render()]); // Using @TimLewis return
}
  

Комментарии:

1. у меня нет проблем с отображением частичного html без переменных на стороне сервера

2. @ZeeshanDaDa Я вношу изменения в код, надеюсь, я смогу помочь вам с вашей проблемой