Проверьте это.
проблема в том, что у меня есть запрос Ajax ко второй таблице, он не будет выполнен.
if ($request->ajax()) { //<-- second request is ajax is it not?
$view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
return response()->json(['html'=>$view]); //<--- return
}
//< --- as you said it's never executed -->
if($page->template == 'portfolio'){
return view('front.pages.portfolio', compact('page', 'portfolios'));
} elseif($page->template == 'job'){
return view('front.pages.job', compact('page', 'jobs'));
}
Смотрите, как ваш второй запрос проходит этоtext if ($request->ajax()) { return ...}
- Поскольку это выше вашего кода, он никогда не достигает нового кода, потому что возвращается в этом состоянии.Чтобы было ясно, вы сказали, что оба запроса были AJAX, так что именно так и происходит в этом случае.
Вам следует отправить другой фрагмент данных, подобный режиму, который вы можете использовать для включения операции.Или какой-то другой способ разграничения между ними.
PS - я не использую Laravel, поэтому я не знаю одобренного Laravel способа сделать это, но он должен быть довольно тривиальным.
Обновление
Я объясню это далее.
Теперь, пожалуйста, поймите, откуда поступают эти запросы, и что они должны делать или в каком порядке они находятся, на самом деле не имеет значения. только имеет значение то, что они вызывают один и тот же кусок кода для обоих из них, и они оба AJAX-запросов.
Первый запрос
Итак, давайте пройдемся по первому шагу, шаг за шагом:
- Вы отправляете первый запрос AJAX
- Он запускает приведенный выше код, Inпервое условие
if($request->ajax())
или по-английски спрашивает: «Этот запрос является AJAX-запросом?»что мы и сказали.Так что проходит - Код присваивает это -
$view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
- Мы возвращаем наш ответ
return response()->json(['html'=>$view]); //<--- return
, который выходит из этого (что бы это ни было) из-за возврата, и ни один изкод ниже # 4 работает.
Чтобы визуализировать это, я ошеломил строки ниже:
/*2*/ if ($request->ajax()) { //<-- second request is ajax is it not?
/*3*/ $view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
/*4*/ return response()->json(['html'=>$view]); //<--- return
/*exit*/ }
//< --- as you said it's never executed -->
if($page->template == 'portfolio'){
return view('front.pages.portfolio', compact('page', 'portfolios'));
} elseif($page->template == 'job'){
return view('front.pages.job', compact('page', 'jobs'));
}
Пока все хорошо.
Второй запрос
Теперь давайте пройдемся по второму запросу одинаково (буквально):
- Вы отправляете второй запрос AJAX
- Он запускает вышеуказанный код, в первом условии
if($request->ajax())
или по-английски спрашивает: "Этот запрос является запросом AJAX?"что мы и сказали.Так что проходит - Код присваивает это -
$view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
- Мы возвращаем наш ответ
return response()->json(['html'=>$view]); //<--- return
, который выходит из этого (что бы это ни было) из-за возврата, и ни один изкод ниже # 4 работает.
Чтобы визуализировать это, я ошеломил строки ниже:
/*2*/ if ($request->ajax()) { //<-- second request is ajax is it not?
/*3*/ $view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
/*4*/ return response()->json(['html'=>$view]); //<--- return
/*exit*/ }
//< --- as you said it's never executed -->
if($page->template == 'portfolio'){
return view('front.pages.portfolio', compact('page', 'portfolios'));
} elseif($page->template == 'job'){
return view('front.pages.job', compact('page', 'jobs'));
}
Выглядит знакомо?
Ну, это должно быть точно так жекак первый.Как я уже говорил несколько раз, потому что оба запроса являются AJAX, и этот код сначала проверяет, являются ли они AJAX.Только первый блок кода запускается.
Решение
Итак, что вы можете сделать, как я сказал, я не использую Laravel, поэтому у меня нет возможности узнать, сработает ли ваш новый код.Все, что я могу пройти, это несколько строк кода, которые были опубликованы, и ваше описание проблемы.Поэтому единственный способ показать вам, как это исправить, - это перестроить его.Таким образом, все, что я делаю, - это передвигаю несколько вещей.
Это хорошо, потому что я могу исправить это только этим.Может быть, это не лучший способ исправить это.Но он заставит ваш код работать, в этом я уверен.
if ($request->ajax()) {
if($page->template == 'portfolio'){
return view('front.pages.portfolio', compact('page', 'portfolios'));
} elseif($page->template == 'job'){
return view('front.pages.job', compact('page', 'jobs'));
}else{
$view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
return response()->json(['html'=>$view]); //<--- return
}
}
Позволяет запустить этот код:
- Вы делаете первый запрос
- Он выполняетсяновый код, в первом условии
if($request->ajax())
или на английском языке он спрашивает: "этот запрос является запросом AJAX?"что мы и сказали.Итак, это проходит - Теперь мы находимся в первой части внутреннего условия или в этой строке
if($page->template == 'portfolio'){
, которая говорит, что Page Tempate равен «портфолио».Я переместил число на строку вниз по причинам «читабельности». - Если выше указано FALSE, мы набрали второе значение
} elseif($page->template == 'job'){
, как и выше, но на этот раз проверяли $page
на «задание». - Если выше указано ЛОЖЬ, мы нажимаем на третье
}else{
, которое всегда верно, поэтому, если ни одно из двух других условий не выполнено, мы запускаем оригинальное условие, которое является кодом в этом блоке.*
Чтобы визуализировать это, я ошеломил строки ниже
/*2*/ if ($request->ajax()) {
/*3*/ if($page->template == 'portfolio'){
/*3.1*/ return view('front.pages.portfolio', compact('page', 'portfolios'));
} elseif($page->template == 'job'){
/*3.2*/ return view('front.pages.job', compact('page', 'jobs'));
}else{
/*3.3*/ $view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
return response()->json(['html'=>$view]); //<--- return
}
}
Как вы можете видеть, теперь мы затронем все наши внутренние условия, когда они будут AJAX-запросами, которые, как вы сказали, являются. И, как я уже упоминал в начале этого упражнения, не имеет значения, что они делают или в каком порядке. То же самое и здесь. Также, как я делал выше, в разделе Второй запрос .
Если вы сделаете еще один запрос (против этого нового кода), он будет работать точно так же, как первый здесь, в разделе Solution .
По сути, в любом случае код не заботится о том, откуда он пришел, он обрабатывает каждый запрос как новый. HTTP не имеет состояния, поэтому нам нужны Cookies и базы данных и так далее. Разница (между исходным кодом и новым материалом) заключается в том, что второй запрос (в новом материале) имеет доступ ко всем 3, где у нас есть другой набор условий для направления нас к правильному выводу.
Так, скажем, мы запускаем выше до # 3, тогда $page
в этом запросе равно job
мы запускаем этот код:
/*3.2*/ return view('front.pages.job', compact('page', 'jobs'));
Теперь скажите, что мы делаем другое, но на этот раз $page
не равно job
и также не равно portfolio
. Ну, в этом случае мы выполняем блок else
с этим кодом:
/*3.3*/ $view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
И так далее для скольких запросов вы хотите сделать.
Заключение
Теперь вы должны понять, что я понятия не имею, установлена ли эта вещь $page
, т. Д. Но если ваш код выше, как это должно быть в Laravel, он должен выполнить эти новые вызовы. Скорее всего, они будут работать, я понятия не имею. Но, я полагаю, вы узнаете это.
Я действительно надеюсь, что это имеет смысл, потому что ваш комментарий действительно не сделал.
Теперь, когда я пытаюсь использовать тот же файл и запрос, но на этот раз для другой таблицы, он перестает работать
Причина, по которой он перестает работать, заключается в отправке данных для таблицы 2 с другой структурой. Вероятно, столбцы различны, если это другая таблица, данные тоже разные и т. Д. Но вы выполняете это, хотя код для первой или исходной таблицы у вас был.
Я действительно не знаю, как еще сказать это. Возможно, есть и другие проблемы, но это, по крайней мере, позволит запустить ваш код.
Ура!