我在CodeIgniter框架中创建了一个简单的RESTful Web服务,作为我学生的示例项目。
我的API函数之一出现问题,如下所述:
public function newmember_post()
{
$data = json_decode($this->post()[0], true); // <-- point of my problem
$ok = $this->guests_model->insertMember($data);
if( $ok ) {
$this->response( ['status'=>'OK', 'member_ID'=> $ok ], 200 );
} else {
$this->response( ['status'=>'Failed'], 500 );
}
}
当我尝试获取POST数据项时
$nama = $this->post('nama);
$alamat = $this->post('alamat');
...
我对所有数据项都有null
值。
当我尝试var_dump( $this->post() )
时,我已经知道了:
array(1) {
[0]=>
string(139) "{"nama":"Devi Chung","alamat":"Jl. Baji Ateka 20","kota":"Makassar","negara":"ID","kodepos":"90131","telepon":"871555","hp":"081234567890"}"
}
// it's a fake identity, no problem
POST数据变成一个数组,所以我获取POST数据的解决方案是这样的
$data = json_decode($this->post()[0], true);
我正在处理的问题是什么,所以我无法使用$this->post()
在前端,我使用JavaScript Promise进行数据POST的API请求
const endpoint_url = 'http://my.services.web/api';
function newMemberSave(){
var new_member = {
'nama': document.getElementById("nama").value,
'alamat': document.getElementById("alamat").value,
'kota': document.getElementById("kota").value,
'negara': document.getElementById("negara").value,
'kodepos': document.getElementById("kodepos").value,
'telepon': document.getElementById("telepon").value,
'hp': document.getElementById("handphone").value
}
fetch( endpoint_url + "/guests/newmember", {
method: 'POST',
body: JSON.stringify(new_member) // <-- point of my problem
} )
.then(status)
.then(json)
.then(function(data) {
console.log(data);
if( data.status == 'OK' ){
alert( "New member saved");
} else {
alert( "Save data failed, try again");
}
})
.catch(error);
}
为了使我更容易处理API响应,我做了这些功能
function status(response) {
if (response.status !== 200) {
console.log("Error : " + response.status);
return Promise.reject(new Error(response.statusText));
} else {
return Promise.resolve(response);
}
}
function json(response) {
return response.json();
}
function error(error) {
console.log("Error : " + error);
}
如果我不使用JSON.stringify
,则后端的POST数据为空。
如果我添加一个Content-Type: application/json
标头,也会收到错误405(不允许使用方法)
答案 0 :(得分:0)
您需要在两者之间输入“ input”,请尝试以下操作
$nama = $this->input->post('nama);
$alamat = $this->input->post('alamat');