1

我正在将我的代码从 CI3 移植到 CI4。一直在 CI3 中工作的使用 jQuery 的 AJAX POST 请求未到达服务器代码。


这是客户端代码

$.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' 是我在 URL 中传递的 serialCode 的值。

4

1 回答 1

3

CodeIgniter 4 是对框架的重写,不向后兼容。根据我目前的经验,将应用程序从版本 3 移植到 4 看起来也是在重写应用程序。

文档说...考虑转换您的应用程序而不是升级它更合适

在版本 3 中,无论客户端代码如何发出请求,路由都是相同的。在版本 4 中,您的路线应该反映您在客户端的意图。

我对 CI4 的第一个 AJAX 请求是 GET。当我第一次使用 POST 请求时,我通过隧道将请求发送到控制器 $routes->get() ,这就是请求没有到达控制器的原因。在评论部分,您会看到@timbrownlaw(可能对 CI 非常有经验)认为这是问题所在。

所以这里的解决方案是jQuery(客户端)POST请求应该通过一个

$routes->post()

路线,因为它出现在问题的代码中。在@timbrownlaw 提供帮助之前,路线一直是

$routes->get().

您可以从文档中看到更多信息。

于 2020-04-04T23:31:53.640 回答