라라벨 5의 AJAX 통화에서 뷰를 반환하려면 어떻게 해야 합니까?
나는 에이잭스 콜에 반환할 html 테이블을 구하려고 합니다.
경로:
Route::post('job/userjobs', 'JobController@userjobs');
호출 페이지의 에이잭스:
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>') );
이것은 잘 작동합니다.
라라벨 5에서 아약스 콜의 뷰를 반환하려면 어떻게 해야 합니까?
그view()
함수는 단지 인스턴스를 만듭니다.View
클래스. HTML 문자열이 아닙니다.그러시려면 전화를 하셔야 합니다.render()
:
$returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->render();
return response()->json(array('success' => true, 'html'=>$returnHTML));
Ajax가 올바르고 DB에서 결과를 얻고 있는 경우
$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) );
다음과 같이 파일 이름을 보기 전에 문자열 함수를 사용합니다.
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;
이것은 확실히 효과가 있을 것입니다.
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]);
확인 - 시행착오를 통해 보기 파일에 블레이드 템플릿 명령을 포함하지 않은 것으로 확인되었습니다.
제가 가지고 있던 것:
@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>
내가 검색했지만 - 나는 이것을 기록한 문서를 찾지 못했습니다.
이 if 조건을 제거하고 작동하는지 확인합니다.
if(Request::isMethod('post') && Request::ajax()) {
당신이 여전히 답을 찾고 있지만 제가 당신과 같은 문제에 부딪혔다면, 그것은 계속 공백으로 돌아갔습니다.성공의 열쇠는 부분 뷰에서 @섹션 @end섹션 부분을 제거하는 것이었습니다.
이것은 저에게 도움이 되었습니다.
echo view('ajaxView')->with(['value' => 'some value']);
리턴 뷰('ajaxView') 대신 에코 뷰('ajaxView')를 사용했습니다.
나는 이것들 없이 그것을 작동시켰습니다: @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`
둘 다 효과가 있는
$view = view("job.userjobs",compact($userjobs))->render();
return response()->json(['html'=>$view]);
언급URL : https://stackoverflow.com/questions/28634712/how-can-i-return-a-view-from-an-ajax-call-in-laravel-5
'prosource' 카테고리의 다른 글
베어가 아닌 Git 저장소로 푸시하는 방법은 무엇입니까? (0) | 2023.08.11 |
---|---|
?:, ?!와 ?=의 차이 (0) | 2023.08.11 |
Android M 권한 : showRequestPermissionRationale() 함수의 사용법이 헷갈립니다. (0) | 2023.08.11 |
Windows-최신 호스트 실행자에 대한 github 작업 워크플로우 파일의 PATH 업데이트 방법 (0) | 2023.08.11 |
스케줄러에서 "데스크톱과 상호 작용"을 사용하여 Windows 2008 태스크를 실행하는 방법 (0) | 2023.08.11 |