Я пытаюсь получить таблицу 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>') );
Это прекрасно работает.
Как я могу вернуть представление из вызова ajax в Laravel 5.
Функция view()
просто создает экземпляр класса View
. Не только HTML-строка. Для этого вы должны вызвать render()
:
$returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->render(); return response()->json(array('success' => true, 'html'=>$returnHTML));
используйте функцию строки перед именем файла вида, например, как
return (String) view('Company.allUserAjax');
если ваш аякс правильный, и вы получаете результаты от своей БД
$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) );
Хорошо. Я обнаружил, что с помощью проб и ошибок вы не указали команды шаблона клинка в файле вида, чтобы это работало.
Я имел:
@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>
Altho я искал – я никогда не нашел документацию, в которой говорится об этом.
удалите это условие if и посмотрите, работает ли оно
if(Request::isMethod('post') && Request::ajax()) {
idk, если вы все еще ищете ответ, но я столкнулся с тем же вопросом, что и вы, он продолжал возвращать пустое. ключ к успеху состоял в том, чтобы удалить часть @section @endsection в частичном представлении