prosource

라라벨 5의 AJAX 통화에서 뷰를 반환하려면 어떻게 해야 합니까?

probook 2023. 8. 11. 22:24
반응형

라라벨 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

반응형