У меня есть запрос AJAX к серверу, сервер возвращает некоторые данные, а затем в функции обратного вызова у меня есть resultStr
, который будет помещен в цель <div>
. resultStr
выполняет итерацию на длину объекта и выполняет итерацию по всем данным, которые мне нужно показать. Дело в том, что Blade не анализирует синтаксис, если вы переместите JavaScript в отдельный файл в активы, чтобы данные не отображались. Некоторые говорят: поместите переменные в представление PHP, а затем установите их в JavaScript. Это нехорошо, так как, например, токен CSRF становится видимым в представлении источника. Кроме того, он не работает для перебора данных. Скажем, на мой взгляд, я передал некоторые данные, такие как:Какое решение для использования лезвия в функциях обратного вызова javascript?
'items' => $items
Тогда мне нужно, чтобы заполнить страницу после вызова AJAX со всеми $items
. resultStr
в функции обратного вызова имеет что-то вроде:
"foreach ($items as $i)" +
"<option value=\"{{ $item->id }}\">{{ ($item->name) }}</option>"
Как лезвие не разбор строки результата он просто не будет работать, и я не могу объявить эти переменные ($items
и $i
) в PHP части. Это не имеет смысла, и если я попытаюсь сделать все, что я получаю, это undefined variable
.
Итак, какое решение должно сделать Blade, проанализировать resultStr
и разместить JavaScript в отдельном файле?
обновлено после ответа, здесь я пытаюсь отделить скрипт от строки результата, которую загружаю из внешнего файла, но результат не очень хороший.
jQuery(function ($) {
$(document).ready(function() {
var form = $('form');
form.submit(function (e) {
e.preventDefault();
$.ajax({
url: form.prop('action'),
type: 'post',
dataType: 'json',
data: form.serialize(),
success: function (data) {
var obj = (data);
var results = "";
var filler;
$.ajax('js/blade/filler.blade.php', {
dataType: 'text',
success: function (data) {
filler = data;
for (var i = 0; i < obj.length; i++) {
results = results + filler;
$("#results").html(results);
}
}
});
}
})
});
});
});
Вы не можете разбирать шаблоны Blade в JavaScript, поскольку компилятор Blade принимает строку шаблона и анализирует такие вещи, как переменные и структуры управления ('@ foreach' и т. Д.). Вам нужно будет сделать это на стороне сервера. –
Также: «Это не так хорошо, как, например, токен CSRF становится видимым в представлении источника». Ваш токен CSRF виден _anyone_, который каким-либо образом просматривает источник вашего приложения Laravel. Это не секретный токен, он просто предназначен для того, чтобы люди не отправляли данные формы в ваше приложение с других сайтов. –
«Вы не можете анализировать шаблоны Blade в JavaScript», синтаксис лезвия анализируется, если вы оставите скрипт в представлении, что я хочу достичь, это отдельный сценарий из представления. Мой скрипт возвращает результатStr, содержащий синтаксис лезвия. Я пробовал вот так: отделите скрипт в script.js и resultStr.blade.php, затем загрузите скрипт resultStr.blade.php и поместите в строку, но не сработает.Пожалуйста, ознакомьтесь с обновленным сообщением – Chriz74