您可以看到下面的js和html代码在同一页面中。当我按下按钮时,ajax将返回Item
json。我的目标是知道是否可以在$item
中同时返回带有test function
变量的json响应。这是因为我想在视图刀片中使用$item
变量。如果是这样,那该怎么办?
控制器
public function index()
{
$furniture = Furniture::all();
return view('index', compact('furniture'));
}
public function test(Request $request)
{
$item = Item::findOrFail($request->item_id);
return response()->json([
'data' => [
'success' => $item,
'key1' => "hello",
'key2' => "world",
]
]);
}
JS
$(document).on('click', '.edit_modal', function() {
var item_id = this.id;
$.ajax({
type: 'POST',
url: "{{ URL::route('test') }}",
headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}' },
data: { "item_id" : item_id},
success: function(data){
if(data.data.success){
$('#edit_id').val(data.data.success.id); // this will output the id eg. 1
$('#edit_desc').val(data.data.success.description); // this will output the description eg. "hi there"
console.log(data.data.key1); // this will output "hello"
console.log(data.data.key2); // this will output "world"
}
}
});
查看
<button type="button" class="edit_modal btn btn-primary" id="{{ $furniture->item_id }}">Button</button>
答案 0 :(得分:2)
刀片视图呈现在服务器端。在浏览器上显示视图时,渲染已完成。
运行AJAX请求时,当前视图(通过Blade或PHP)中没有进一步的渲染。因此,您无法通过AJAX将其他变量传递给刀片模板。
如果您真的想要此功能,那么开始使用AJAX似乎很奇怪。您只应正常提交表单,并在服务器端使用传递到该视图的$item
来呈现一个新视图。使用AJAX时,您需要返回一个Javascript可以理解的响应(JSON),而不是PHP无法理解的响应,因为Javascript将在客户端呈现响应。
在此处详细了解服务器端和客户端编程之间的区别:What is the difference between client-side and server-side programming?