如何在php循环中将javascript变量作为变量传递:
像这样的东西(显然不起作用):
var myJsVar = 100;
@for ($i = 0; $i<myJsVar; $i++)
... some code
@endfor
此外,我尝试使用 ajax 解决此问题:
/**
* Get slider value
*/
$.ajax({
type: 'GET',
url: myUrl,
data: myJsVar,
success: function (option) {
console.log(myJsVar);
}
});
它返回给我成功函数,
此外,我在控制器中执行此操作:
public function prod(Request $request)
{
if ($request->ajax()) {
$ajax = "AJAX";
dd($ajax);
} else {
$ajaxN = "NO Ajax";
dd($ajaxN);
}
}
它没有用。
我不确定如何进行,希望得到一些帮助。
PHP
甚至在页面到达浏览器之前就已经完成了它的工作,因此将变量从 Javascript 传递给 PHP 而不执行另一个请求是不可能的。考虑
A)将循环移动到Javascript。考虑使用一些UI库,如Vue.js,Angular或React。
B) 将myJsVar
的内容移动到 PHP。如果它取决于用户输入或浏览器渲染,那是不可能的。
C) 通过 Ajax 请求执行渲染逻辑
$.ajax({
type: 'GET',
url: myUrl,
headers: {'X-Requested-With': 'XMLHttpRequest'},
data: {value: myJsVar},
success: function (response) {
$(someContainer).html(response);
}
});
在控制器中:
public function prod()
{
$value = Request::get('value');
return view('view-with-a-loop')->with('value', $value);
}
小心后一种方法 XSS。
我在刀片中使用一个部分来添加 javascript,然后将其拉入布局中。下面的示例显示了整数/字符串/模型集合的传递,例如:
刀片模板
@extends('layouts.app')
@section('javascript')
<script type="text/javascript">
var myInteger = {!! $myInteger !!};
var myString = '{!! $myInteger !!}';
var myObject = {!! json_encode($models) !!};
</script>
@endsection
@section('content')
...
@endsection
布局(javascript 可以放在布局中的任何位置,即头部或身体:
<!DOCTYPE html>
<html>
<body>
@yield('content')
@yield('javascript')
</body>
</html>
一种方法
是将值呈现为meta
标签,如下所示:
<meta name="myJsVar" content="100">
然后使用 JavaScript 通过 DOM 读取该值:
var myJsVar = parseInt(document.querySelector("meta[name=myJsVar]").content);