如何从 Laravel 5 中的 AJAX 调用返回视图?

IT技术 javascript php jquery ajax laravel
2021-03-07 06:33:44

我正在尝试获取一个 html 表以在 ajax 调用时返回。

路线:

Route::post('job/userjobs', 'JobController@userjobs');  

调用页面上的ajax:

function getUserJobs(userid) {
    $_token = "{{ csrf_token() }}";
    var userid = userid;
    $.ajax({
        headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') },
        url: "{{ url('/job/userjobs') }}",
        type: 'POST',
        cache: false,
        data: { 'userid': userid, '_token': $_token }, //see the $_token
        datatype: 'html',
        beforeSend: function() {
            //something before send
        },
        success: function(data) {
            console.log('success');
            console.log(data);
            //success
            //var data = $.parseJSON(data);
            if(data.success == true) {
              //user_jobs div defined on page
              $('#user_jobs').html(data.html);
            } else {
              $('#user_jobs').html(data.html + '{{ $user->username }}');
            }
        },
        error: function(xhr,textStatus,thrownError) {
            alert(xhr + "\n" + textStatus + "\n" + thrownError);
        }
    });
}



//on page load
getUserJobs("{{ $user->id }}");

控制器:

public function userjobs() {
    $input = Request::all();
    if(Request::isMethod('post') && Request::ajax()) {
        if($input['userid']) {
            $userjobs = Userjob::select('select * from user_jobs where user_id = ?', array($input['userid']));
            if(! $userjobs) {
                return response()->json( array('success' => false, 'html'=>'No Jobs assigned to ') );
            }
            $returnHTML = view('job.userjobs')->with('userjobs', $userjobs);
            return response()->json( array('success' => true, 'html'=>$returnHTML) );

        }
    }   
}

看法:

@section('content')
<table class="table table-striped">
    <tbody>
@foreach ($userjobs as $userjob)
        <tr>
            <td><strong>{{ $userjob->title }}</strong><br />
            {{ $userjob->description }}
            </td>
        </tr>
@endforeach
</table>
@stop

我在 json.html 数据中没有得到任何东西。没有什么。如果在控制器中我说:

return response()->json( array('success' => true, 'html'=>'<span>html here</html>') );

这工作得很好。

如何从 Laravel 5 中的 ajax 调用返回视图。

6个回答

view()函数只是创建View类的一个实例不仅仅是一个 HTML 字符串。为此,您应该致电render()

$returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->render();
return response()->json(array('success' => true, 'html'=>$returnHTML));
好的 - 将 ->render() 添加到如上所述的视图中。但我仍然没有在输出中得到任何 html。这是控制台输出: Object {success: true, html: ""}. 还有更多想法吗?
2021-04-17 06:33:44
如果我这样做,return response()->json(array('success' => true, 'html'=>'<div>hello</div>'));它会输出预期的结果。
2021-04-17 06:33:44
现在我在全新安装上尝试了它,它运行得非常好。也许尝试更新 Laravel ( composer update)
2021-04-17 06:33:44
嗯,我也无法让它工作......似乎调用会render()自动输出内容,而不仅仅是将其作为字符串返回。这在 Laravel 4 中有所不同,我不确定这是一个功能还是一个错误。
2021-04-18 06:33:44
composer update没有解决问题。我正在运行 laravel/framework (v5.0.6)
2021-05-13 06:33:44

如果您的 ajax 是正确的并且您正在从您的数据库中获得结果

 $returnHTML = view('job.userjobs',[' userjobs'=> $userjobs])->render();// or method that you prefere to return data + RENDER is the key here
            return response()->json( array('success' => true, 'html'=>$returnHTML) );
@SanjaySharma 不客气。render 方法不止一次救了我!
2021-05-04 06:33:44
谢谢这个解决方案对我有用。你救了我的一天。非常感谢
2021-05-08 06:33:44

在查看文件名之前使用字符串函数,如

return (String) view('Company.allUserAjax');
$returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->renderSections()['content'];

所以这个问题很旧,最受好评的答案并没有解决提问者和我的问题。我遇到了同样的问题,我花了两天时间才找到解决方案。我到处寻找上述用途的答案->render()但什么都没有回来。我有一个我想包括的局部视图。我没有扩展我的部分视图或给它一个部分名称。因为在使用 include 指令将其包含在刀片文件中时,这不是必需的。

所以解决方案是,将您的 html 包含在一个部分中,而不是render()使用renderSections()['sectionname']. 仅仅使用是render()行不通的。

我希望这可以让某人安全一些时间和沮丧!

不要将您的视图作为 JSON 返回,只需从您的控制器返回视图 例如:

$view = view("<your url>",compact('data'))->render();
return $view;

这肯定会奏效。