有没有一种方法可以将带有普通变量的ajax响应发送/传递给视图?

时间:2018-07-17 14:42:42

标签: php ajax laravel

您可以看到下面的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>

1 个答案:

答案 0 :(得分:2)

刀片视图呈现在服务器端。在浏览器上显示视图时,渲染已完成。

运行AJAX请求时,当前视图(通过Blade或PHP)中没有进一步的渲染。因此,您无法通过AJAX将其他变量传递给刀片模板。

如果您真的想要此功能,那么开始使用AJAX似乎很奇怪。您只应正常提交表单,并在服务器端使用传递到该视图的$item来呈现一个新视图。使用AJAX时,您需要返回一个Javascript可以理解的响应(JSON),而不是PHP无法理解的响应,因为Javascript将在客户端呈现响应。

在此处详细了解服务器端和客户端编程之间的区别:What is the difference between client-side and server-side programming?