【问题标题】:how to return view html into controller to ajax success如何将视图 html 返回到控制器以 ajax 成功
【发布时间】:2021-10-16 04:40:51
【问题描述】:

我想将整个 html 返回到控制器以进行 ajax 响应。我正在使用 render() 但没有将任何数据输入返回方法

下面是我的ajax:

$.ajax({
                            type: 'GET',
                            url: '{{url('/filter_each_video')}}',
                            data : { resolution : myCheckboxes, fps : myCheckboxesfps },
                            dataType: 'json',
                            success: function (response) {
                                console.log(response);
                               
                            },
                            error: function (data) {
                                console.log(data);
                                // console.log(data);
                            }
                });

下面是我的控制器实际渲染视图的地方

function filter_each_video(){
        if(request()->ajax()){
            
            $item = Item::whereIn('format', $_GET['resolution'])->get();
            $formats = DB::table('items')->select('format')->distinct()->get();
            $fps = DB::table('items')->select('fps')->distinct()->get();
            $data['item_count'] = $item;
            $data['item'] = $item;
            $data= $this->sellWise($data);
            $data= $this->starWise($data);
            $data= $this->dateWise($data);
            return view('frontend.pages.videos_for_each_filter', compact('data','formats','fps'))->render();
        }
    }

下面是我设置值的视图文件,整个 html 返回到控制器到 ajax 响应

<?php
        $html ="";
               $html.= '<div class="row video-list">';

               foreach($data['item'] as $video){

                  $html.= '<div class="item video-item сol-12 col-md-6 col-lg-3 text-white mb-4 pull-left">
                        <div class="item-wrapper display-7">
                            <div class="item-img">Video Name</div>
                        </div>
                        </div>';

                }

                $html.= '</div>';

    return $html;

?>

如果有人知道我在将 html 内容获取到控制器时到底做错了什么,请告诉我

我想将整个 html 返回到 ajax 响应

【问题讨论】:

  • 你能把ajax里面的dataType: 'json',改成dataType: 'html', 吗?
  • @Shamir Imtiaz 仍然没有得到任何回应。
  • 您是否从控制器正确获取数据?请在控制器中传入随机数据,如return "hello";,并检查数据是否正确进入 ajax success:
  • 来自控制器的@Shamir Imtiaz 返回数据commingin ajax 成功。 Return Hello 正确地进入 ajax 成功:
  • 先生,在您看来,您不需要返回 html 或任何内容。只需在视图文件中使用普通的 php/blade 代码。请更新您的代码,让我知道代码正在运行。

标签: ajax laravel


【解决方案1】:

(1) 你试过response($output, 200, $headers)吗?

$html = view('frontend.pages.videos_for_each_filter', compact('data','formats','fps'))
           ->render();

\Log::debug('Rendered HTML', ['html'=>$html]);

return response($html,200);

检查您的/storage/logs 以仔细检查$html 是否正确。

(2) 你也可以试试 JSON:

return response()->json(['html' => $html]); 

在客户端,

console.log("res is ", response.data.html);

附带说明,您应该验证请求数据,而不是直接使用$_GET。你的控制器方法应该看起来更像这样......

use Illuminate\Http\Request; // (? From memory, maybe check the namespace)

public function filter_each_video(Request $request)
{
    $request->validate(['resolution' => 'required|string']);

    if( $request->ajax() ){

        $item = Item::whereIn('format', $request->resolution)->first();

        // ... cont'd
    }
}

如果您收到空响应,请在其中添加一些 \Log::debug 语句并找出您丢失响应的位置。

【讨论】:

  • 我在上面都试过了,但作为回应,我得到了空数据。像这样 {"html":""}
  • 您是否检查了存储日志以确保$html 不为空?
猜你喜欢
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
相关资源
最近更新 更多