使用 Codeigniter 3 使用 fetch 将数据发送到控制器时数据变为空
Data becomes null when sending data to controller using fetch using Codeigniter 3
我有数据要从视图发送到控制器。我正在尝试使用 fetch 来发送它。数据已成功发送,状态为 200,并且数据位于网络上的请求负载中。但是当我想尝试在数据控制器中显示它时,它输出 null。有没有人有办法让控制器中的数据不为空?
这是我的脚本:
<?php
defined('BASEPATH') or exit('No direct script access allowed');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome to CodeIgniter</title>
</head>
<body>
<div id="container">
<h1>Welcome to CodeIgniter!</h1>
<div id="body">
<button id="kirimkecontroller">Kirim</button>
<p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds. <?php echo (ENVIRONMENT === 'development') ? 'CodeIgniter Version <strong>' . CI_VERSION . '</strong>' : '' ?></p>
</div>
<script>
// var data = {
// 'testing': 'isi testing'
// }
let formData = new FormData()
formData.append('testing', 'isi testing')
const button = document.querySelector('#kirimkecontroller')
button.addEventListener('click', () => {
fetch("<?= base_url(); ?>/welcome/kiriman_dari_fetch", {
method: "POST",
mode: 'no-cors',
headers: {
"Content-Type": "application/json"
},
body: formData,
}).then(res => console.log('sukses ', res.status))
.catch(e => console.log('gagal ', e));
window.open("<?php echo base_url(); ?>welcome/kiriman_dari_fetch", '_blank');
})
</script>
</body>
</html>
这是我在控制器中的脚本:
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Welcome extends CI_Controller
{
public function index()
{
$this->load->view('welcome_message');
}
public function kiriman_dari_fetch()
{
$testing = $this->input->post('testing');
echo json_encode($testing); // null
}
}
输出为null
在检查元素 > 网络中:
如何从那里获取数据到控制器?
public function kiriman_dari_fetch()
{
$testing['status'] = $this->input->post('testing');
echo json_encode($testing); // null
}
并尝试使用 ajax
$('.kirimkecontroller').click(function(){
$.ajax({
type: 'POST',
url: '<?= base_url(); ?>/welcome/kiriman_dari_fetch',
dataType: 'json',
data: formData,
success: function (response) {
console.log('sukses ', response.data.status)
window.open("<?php echo base_url(); ?>welcome/kiriman_dari_fetch", '_blank');
}
})
})
把这个放在你的头标签中
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
据我了解,您的问题是您正在尝试向该控制器发送 POST 请求,并希望在之后在新选项卡上显示 post 的数据,对吧?
如果是,请记住这是两个单独的请求:当您通过获取或 jquery 发送 POST 请求时,控制器已经收到您的数据并通过以下方式响应该请求:
echo json_encode($testing);
因此您可以在“检查元素”>“网络”中看到响应:
但是当你打开一个新的空白时window,它是一个不同的GET请求,所以当你尝试打印它时有空值。
您可以使用以下代码段进行检查:
public function kiriman_dari_fetch()
{
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$testing = $this->input->post('testing');
echo json_encode($testing);
} else {
$data = array();
$data['request_type'] = 'THIS IS GET';
$this->load->view('welcome_message', $data); // change welcome_message to another of your views
}
}
添加 $request_type 查看以检查 GET 或 POST 请求:
<body>
<div id="container">
<h1>Welcome to CodeIgniter!</h1>
<div id="body">
<button id="kirimkecontroller">Kirim</button>
<p><?php echo $request_type; ?></p>
....
</html>
当您在浏览器中打开 URL 时,它会显示“THIS IS GET”
回到您的问题,您可以使用 post 请求的响应,然后通过 jquery 或 html 选择器更新当前视图。
我有数据要从视图发送到控制器。我正在尝试使用 fetch 来发送它。数据已成功发送,状态为 200,并且数据位于网络上的请求负载中。但是当我想尝试在数据控制器中显示它时,它输出 null。有没有人有办法让控制器中的数据不为空?
这是我的脚本:
<?php
defined('BASEPATH') or exit('No direct script access allowed');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome to CodeIgniter</title>
</head>
<body>
<div id="container">
<h1>Welcome to CodeIgniter!</h1>
<div id="body">
<button id="kirimkecontroller">Kirim</button>
<p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds. <?php echo (ENVIRONMENT === 'development') ? 'CodeIgniter Version <strong>' . CI_VERSION . '</strong>' : '' ?></p>
</div>
<script>
// var data = {
// 'testing': 'isi testing'
// }
let formData = new FormData()
formData.append('testing', 'isi testing')
const button = document.querySelector('#kirimkecontroller')
button.addEventListener('click', () => {
fetch("<?= base_url(); ?>/welcome/kiriman_dari_fetch", {
method: "POST",
mode: 'no-cors',
headers: {
"Content-Type": "application/json"
},
body: formData,
}).then(res => console.log('sukses ', res.status))
.catch(e => console.log('gagal ', e));
window.open("<?php echo base_url(); ?>welcome/kiriman_dari_fetch", '_blank');
})
</script>
</body>
</html>
这是我在控制器中的脚本:
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Welcome extends CI_Controller
{
public function index()
{
$this->load->view('welcome_message');
}
public function kiriman_dari_fetch()
{
$testing = $this->input->post('testing');
echo json_encode($testing); // null
}
}
输出为null
在检查元素 > 网络中:
如何从那里获取数据到控制器?
public function kiriman_dari_fetch()
{
$testing['status'] = $this->input->post('testing');
echo json_encode($testing); // null
}
并尝试使用 ajax
$('.kirimkecontroller').click(function(){
$.ajax({
type: 'POST',
url: '<?= base_url(); ?>/welcome/kiriman_dari_fetch',
dataType: 'json',
data: formData,
success: function (response) {
console.log('sukses ', response.data.status)
window.open("<?php echo base_url(); ?>welcome/kiriman_dari_fetch", '_blank');
}
})
})
把这个放在你的头标签中
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
据我了解,您的问题是您正在尝试向该控制器发送 POST 请求,并希望在之后在新选项卡上显示 post 的数据,对吧?
如果是,请记住这是两个单独的请求:当您通过获取或 jquery 发送 POST 请求时,控制器已经收到您的数据并通过以下方式响应该请求:
echo json_encode($testing);
因此您可以在“检查元素”>“网络”中看到响应:
但是当你打开一个新的空白时window,它是一个不同的GET请求,所以当你尝试打印它时有空值。 您可以使用以下代码段进行检查:
public function kiriman_dari_fetch()
{
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$testing = $this->input->post('testing');
echo json_encode($testing);
} else {
$data = array();
$data['request_type'] = 'THIS IS GET';
$this->load->view('welcome_message', $data); // change welcome_message to another of your views
}
}
添加 $request_type 查看以检查 GET 或 POST 请求:
<body>
<div id="container">
<h1>Welcome to CodeIgniter!</h1>
<div id="body">
<button id="kirimkecontroller">Kirim</button>
<p><?php echo $request_type; ?></p>
....
</html>
当您在浏览器中打开 URL 时,它会显示“THIS IS GET”
回到您的问题,您可以使用 post 请求的响应,然后通过 jquery 或 html 选择器更新当前视图。