#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 Я вношу изменения в код, надеюсь, я смогу помочь вам с вашей проблемой