使用来自 blade 的参数调用 javascript 函数
Calling javascript function with parameters from blade
我浏览了一堆听起来相似的问题,但其中 none 适用于我的问题。我想将一个参数(由 foreach
获得)传递给 javascript 函数(在与我的视图相同的文件中)以在我的 blade 视图的数据表中提供多个 Select2 下拉列表。问题似乎是我无法将 php 变量 $process->id
传递给 javascript 函数。
根据我的 blade 观点:
@foreach($processes as $process)
<tr>
<td>{{ $process->id }}</td>
<td>{{ $process->title }}</td>
<td>{{ $process->client }}</td>
<td>
<script> getDisponents($process->id); </script> //not working ofc.
<select class="mySelect" name="state"></select>
</td>
(...)
@push('js')
<script>
function getDisponents(process_id){
$.ajax({
url: 'http://localhost/matpro/public/getUsersPerProcess', //works.
type: "get",
data: {
processId:process_id,
//processId:'5', //works for manually given ids.
},
success: function(response) {
$('.mySelect').select2({
data: response,
});
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus + " : " + jqXHR.status + " : " + errorThrown);
}
});
}
</script>
这样试试
<script>
var processId = <?php echo $process->id ?>
getDisponents(processId)
function getDisponents(process_id){ $.ajax({ url: 'http://localhost/matpro/public/getUsersPerProcess', //works. type: "get", data: { processId:process_id, }, success: function(response) { $('.js-example-basic-single').select2({ data: fData, }); }, error: function(jqXHR, textStatus, errorThrown) { alert(textStatus + " : " + jqXHR.status + " : " + errorThrown); } }); } </script>
我的建议是将 javascript 与 php 分开,并在元素本身上使用数据属性,这些属性可以使用 javascript.
轻松检索
Blade:
<select class="mySelect" data-id="{{$process->id}}" name="state"></select>
然后在 JS 中使用循环遍历每个实例并获取它的 id 以传递给 ajax 并能够使用适当的响应填充正确的元素:
var processUrl = 'http://localhost/matpro/public/getUsersPerProcess';
$('.mySelect').each(function(){
// `this` is current instance of the collection
var $sel = $(this), process_id = $sel.data('id');// from attribute
$.get(processUrl , {processId:process_id}).then(function(response){
// only pass data to current instance of select
$sel.select2({data: response});
}).catch(function(err){
console.log('Ooops, something went wrong')
});
});
说了这么多,我真的不明白你为什么不填充每个服务器端
我浏览了一堆听起来相似的问题,但其中 none 适用于我的问题。我想将一个参数(由 foreach
获得)传递给 javascript 函数(在与我的视图相同的文件中)以在我的 blade 视图的数据表中提供多个 Select2 下拉列表。问题似乎是我无法将 php 变量 $process->id
传递给 javascript 函数。
根据我的 blade 观点:
@foreach($processes as $process)
<tr>
<td>{{ $process->id }}</td>
<td>{{ $process->title }}</td>
<td>{{ $process->client }}</td>
<td>
<script> getDisponents($process->id); </script> //not working ofc.
<select class="mySelect" name="state"></select>
</td>
(...)
@push('js')
<script>
function getDisponents(process_id){
$.ajax({
url: 'http://localhost/matpro/public/getUsersPerProcess', //works.
type: "get",
data: {
processId:process_id,
//processId:'5', //works for manually given ids.
},
success: function(response) {
$('.mySelect').select2({
data: response,
});
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus + " : " + jqXHR.status + " : " + errorThrown);
}
});
}
</script>
这样试试
<script>
var processId = <?php echo $process->id ?>
getDisponents(processId)
function getDisponents(process_id){ $.ajax({ url: 'http://localhost/matpro/public/getUsersPerProcess', //works. type: "get", data: { processId:process_id, }, success: function(response) { $('.js-example-basic-single').select2({ data: fData, }); }, error: function(jqXHR, textStatus, errorThrown) { alert(textStatus + " : " + jqXHR.status + " : " + errorThrown); } }); } </script>
我的建议是将 javascript 与 php 分开,并在元素本身上使用数据属性,这些属性可以使用 javascript.
轻松检索Blade:
<select class="mySelect" data-id="{{$process->id}}" name="state"></select>
然后在 JS 中使用循环遍历每个实例并获取它的 id 以传递给 ajax 并能够使用适当的响应填充正确的元素:
var processUrl = 'http://localhost/matpro/public/getUsersPerProcess';
$('.mySelect').each(function(){
// `this` is current instance of the collection
var $sel = $(this), process_id = $sel.data('id');// from attribute
$.get(processUrl , {processId:process_id}).then(function(response){
// only pass data to current instance of select
$sel.select2({data: response});
}).catch(function(err){
console.log('Ooops, something went wrong')
});
});
说了这么多,我真的不明白你为什么不填充每个服务器端