我正在尝试接收和解析使用Codeigniter在POST请求中发送的JSON对象,但我无法“找到”它。
这是我的控制器代码:
public function parse () {
$json = $this->input->post();
$json = stripslashes($json);
$json = json_decode($json);
print_r($json);
}
这是我的JSON对象:
{"data":"value"}
答案 0 :(得分:24)
这是正确的方法。
$input_data = json_decode(trim(file_get_contents('php://input')), true);
答案 1 :(得分:7)
$post = json_decode($this->security->xss_clean($this->input->raw_input_stream));
当您使用$ this-> input-> raw_input_stream时,您可以多次读取它,它与file_get_contents(' php:// input')基本相同。这适用于CI3。我不知道它是否适用于CI2。
答案 2 :(得分:4)
尝试使用此代码,它将输出一个包含所有参数的数组。
$this->input->raw_input_stream;
$input_data = json_decode($this->input->raw_input_stream, true);
$input_data
将返回数组
答案 3 :(得分:2)
试试这个
$json = $this->input->post('data');
$json = stripslashes($json);
$json = json_decode($json);
print_r($json);
您需要将所需数据变量的键从post数组作为参数传递给post()
答案 4 :(得分:1)
Firze的回答是正确的,但这是一个更详细的答案。我不被允许发表评论所以我将其作为答案发布。
这与CodeIgniter无法获取JSON
有关。 jQuery
做了一些引人入胜的技巧,并将您的数据转换为form-data-x
,这就是为什么当您没有指定content type
时,它的工作原理是什么?编码您的对象或其他情况。
如果您想要纯JSON
,解决方法是使用$this->input->raw_input_stream
来抓取您的JSON
并使用php
json_decode
对其进行解码。检查下面的完整答案和代码:
答案 5 :(得分:0)
确保您拥有POST数据,使用$this->input->post()
它将始终返回空,您应该输入输入类型名称$this->input->post('name_of_input_text')
答案 6 :(得分:0)
您确定要发布数据而不是进行GET吗?我今天早些时候遇到了这个问题(这就是我发现这个问题的方式),我正在进行POST,但是使用JSONP似乎是用GET完成的。
CodeIgniter有一个名为get_post的函数,可以从任何地方获取数据。
$this->input->get_post_string('data');
我希望这可以帮助你。
如果您愿意,可以手动执行此操作。
function get_post($index = '', $xss_clean = FALSE){
if ( ! isset($_POST[$index]) )
{
return $this->get($index, $xss_clean);
}
else
{
return $this->post($index, $xss_clean);
}
}
答案 7 :(得分:0)
我知道这是一篇旧帖子,但对于其他人来说,这可能会有所帮助:
在浏览器方面,我使用类似于此模式的代码创建数据包:
var form_data = { };
$.each($('#mvt_dialog_form').serializeArray(), function() {
form_data[this.name] = this.value;
});
// add the address data to the payload
var result = {
form_data: form_data,
locations: addressData,
selected_location: selectedLocation
};
// now wrap it all up with a pretty bow
// Seriously, the key:value format is required for codeigniter INPUT class to be able to "see"
var movement = {
movement_dlg: JSON.stringify(result)
};
然后我将“发布”移动到服务器。 在控制器中,我然后使用以下逻辑:
// Perform XSS filtering
$postData = $this->input->post(NULL, TRUE);
$result = json_decode($postData['movement_dlg']);
答案 8 :(得分:0)
只需在请求标题中添加正确的内容类型
即可Content-Type: application/json
答案 9 :(得分:0)
为了使用标准的CI方法。 在index.php中,插入几行:
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
@QueryEntity
public class Card {
@Id
@JsonProperty("id")
@Field("_id")
String id;
@JsonProperty("main_reg_dt")
@Field("main_reg_dt")
Date registeredDateTime;
}
在bootstrap中实现。 RIP Codigniter ......(
答案 10 :(得分:0)
exports.handler = async function(event, context, callback) {
var docRef = db.collection('users').doc('alovelace');
let setAda = await docRef.set({
first: 'Ada',
last: 'Lovelace',
born: 1815
});
}
答案 11 :(得分:-1)
试
json_decode(array($this->input->post()))
OR
$tmp[] = (array)json_decode($this->input->post());
print_r($tmp);