将JSON发布到Codeigniter控制器

时间:2011-12-21 20:55:25

标签: json codeigniter

我正在尝试接收和解析使用Codeigniter在POST请求中发送的JSON对象,但我无法“找到”它。

这是我的控制器代码:

public function parse () {

  $json = $this->input->post();
  $json = stripslashes($json);
  $json = json_decode($json);

  print_r($json);

}

这是我的JSON对象:

{"data":"value"}

12 个答案:

答案 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对其进行解码。检查下面的完整答案和代码:

Retrieve JSON POST data in CodeIgniter

答案 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);