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

问题描述 投票:0回答:13

我正在尝试获取一个 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 调用返回视图。

javascript php jquery ajax laravel
13个回答
60
投票

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

$returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->render();
return response()->json(array('success' => true, 'html'=>$returnHTML));

8
投票

如果你的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) );

6
投票

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

return (String) view('Company.allUserAjax');

4
投票
$returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->renderSections()['content'];

所以这个问题已经很老了,最高票数的答案并没有解决提问者和我的问题。我遇到了同样的问题,花了两天时间才找到解决方案。我到处寻找上述用途的答案

->render()
。但什么也没回来。我有一个部分观点,我想包括在内。我没有扩展我的部分视图或给它一个部分名称。因为当使用 include 指令将其包含在刀片文件中时,这是不必要的。

所以解决方案是,将您的 html 包含在一个部分中,并使用

render()
而不是
renderSections()['sectionname']
。仅使用
render()
是行不通的。

我希望这能给某人带来一些时间和挫败感!


4
投票

不要以 JSON 形式返回视图,只需从控制器返回视图 例如:

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

这肯定会起作用。


2
投票

如果你在 Laravel 中使用 AJAX,那么当你想用 AJAX 响应显示视图时,不要使用 return 命令,而是使用 echo 命令。

例如,不要使用:

return view('ajax', ['ajax_response'=> $response]);

用途:

echo view('ajax', ['ajax_response'=> $response]);

其他示例,请勿使用:

$view = view("job.userjobs",compact($userjobs))->render();
return response()->json(['html'=>$view]);

用途:

$view = view("job.userjobs",compact($userjobs))->render();
echo response()->json(['html'=>$view]);

1
投票

好的 - 我通过反复试验发现您没有在视图文件中包含刀片模板命令才能使其正常工作。

我有:

@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

现在正在与:

合作
<table class="table table-striped">
    <tbody>
    <?php foreach ($userjobs as $userjob){?>
        <tr>
            <td><strong><?php echo $userjob->title; ?></strong><br />
            <?php echo $userjob->description; ?>
            </td>
        </tr>
    <?php } ?>
</table>

尽管我进行了搜索 - 我从未找到说明这一点的文档。


0
投票

删除这个 if 条件并看看它是否有效

if(Request::isMethod('post') && Request::ajax()) {

0
投票

我不知道如果您仍在寻找答案,但我遇到了与您相同的问题,它一直返回空白。成功的关键是删除部分视图中的 @section @endsection 部分


0
投票

这对我有帮助:

echo view('ajaxView')->with(['value' => 'some value']);

我已经使用 echo view('ajaxView') 代替 return view('ajaxView')


0
投票

我在没有这些的情况下也能正常工作:@section & @stop

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

要么

$returnHTML = view('job.userjobs',[' userjobs'=> $userjobs])->render();// or method that you prefere to return data + RENDER is the key here

或者这个

$returnHTML = view('job.userjobs',compact($userjobs))->render();// or method that you prefere to return data + RENDER is the key here`

两者都有效


0
投票
$view = view("job.userjobs",compact($userjobs))->render();
return response()->json(['html'=>$view]);

0
投票

Laravel 10

$view = view('job.userjobs', ['userjobs' => $userjobs])->render();
return $view;

$.ajax({
        type: "GET",
        url: "url",
        dataType: "html",
        success: function (result) {
            $('#content').html(result);
        },
    });
© www.soinside.com 2019 - 2024. All rights reserved.