【问题标题】:How to get data out of $_POST after it was sent with $.ajax使用 $.ajax 发送数据后如何从 $_POST 中获取数据
【发布时间】:2013-09-11 12:17:44
【问题描述】:

我正在使用 ajax 发送数据:

$('article.work a').click(function(e){
    var h = $(this).attr('href');

    e.preventDefault();

    $.ajax({
      type: "POST",
      url: h,
      data: workItems,
      success: function(data){
        console.log('success');
        window.location = h;
      },
      error: function(){
        console.log('eror');                    
      }             
    });
});

它发送正常,在检查萤火虫帖子标签后,它看起来像:

所以我相信它正在发送正确的数据。但是当我尝试通过 php 从 $_POST 中检索它时,我会这样做

<?php 
print_r(json_decode($_POST["json"])); 
?>;

什么都没有打印出来。

我做错了什么? 为什么 $_POST 无法识别我的数据,即使它已发送?

【问题讨论】:

  • 你试过&lt;?php var_dump($_POST); ?&gt; 吗?
  • @Marin Sagovac 是的,我尝试过 - 返回的值为 array(0) { }
  • 试试:var_dump($_POST['json'], true)。这意味着这将导致关联数组,而不是对象。
  • 请转到 Chrome 上的Header 标签,看看什么是方法,post/get?
  • 但我敢肯定,在成功处理程序中,您有 document.location = h;,这是一个重定向。

标签: php jquery ajax post


【解决方案1】:

试试:

var_dump($_POST['json'], true)。这意味着结果将是关联数组,而不是对象。

试试:

    $.ajax({
        url: "h",
        type: "post",
        data: workItems,
    });

并尝试使用var_dump($_POST); 或关联数组:var_dump($_POST['workItems'], true); 获取数据。

我认为在输出 JSON 的结果之前应该正确格式化为 UTF8:

$result = mb_convert_encoding($result,'UTF-8','UTF-8'); 
$result = json_decode($result);

将上面的代码放在输出 JSON 代码之前。

【讨论】:

  • 试过上面的代码,var_dump($_POST['workItems'], true)返回NULL bool(true)
  • 在 POST 输出之前,您是否将标题放在文件 header("Content-Type: application/json", true); 上?
  • 如 cmets 中所述,问题是我在进行重定向。它现在可以工作了 - 感谢您指出这一点 - 真的错过了 js 中的那一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2016-10-11
相关资源
最近更新 更多