В codeigniter 4 я отправил запрос POST, используя jQuery, но запрос не достигает сервера - PullRequest
1 голос
/ 02 апреля 2020

Я портирую свой код с CI3 на CI4. AJAX POST-запрос с использованием jQuery, который работал в CI3, не достигает кода сервера.


Вот код на стороне клиента

$.ajax({
    url: 'recordCreate/' + serialCode,
    type: 'POST',
    data: {data: data},
    dataType : 'text',
}).done(function(result) {
    alert(result);
});

Мои маршруты

$routes->post('recordCreate/(:alpha)', 'AjaxWrite::recordCreate/$1');

и контроллер это

<?php namespace App\Controllers;
use CodeIgniter\Controller;
class AjaxWrite extends Controller{
  public function __construct()
  {
  }
  function recordCreate($serailCode)
  {
    echo urldecode($serailCode);
    echo $this->request->getPost('data');
  }
}

и содержится в файле с именем 'AjaxWrite. php'

С этим я получаю ошибку

Контроллер или его метод не найден: App \ Controllers \ RecordCreate :: qweq

где 'qweq' - это значение serialCode, которое я передаю в URL.

1 Ответ

1 голос
/ 05 апреля 2020

CodeIgniter 4 - это переписывание фреймворка и не обратно совместимое. Исходя из моего опыта, портирование приложения с версии 3 на 4 выглядит так, как будто вы также переписываете приложение.

В документации сказано ... Лучше подумать о преобразовании вашего приложения, чем его обновление .

В версии 3 маршрутизация была одинаковой независимо от того, как клиентский код сделал запрос. В версии 4 ваш маршрут должен отражать ваше намерение на клиенте.

Мои первые AJAX запросов с CI4 были GET. Когда я впервые использовал запрос POST, я туннелировал запрос к контроллеру через $routes->get(), и это является причиной того, что запрос не достиг контроллера. В разделе комментариев вы увидите, что @timbrownlaw (вероятно, очень опытный с CI) воспринял это как проблему.

Таким образом, решение здесь состоит в том, что jQuery (клиентский) POST-запрос должен проходить через

$routes->post()

маршрут в том виде, в каком он указан в коде в вопросе. До того как @timbrownlaw помог, маршрут был

$routes->get().

Вы можете увидеть больше из документации .

...