【问题标题】:Cant Post JSON Object using Jquery.post()无法使用 Jquery.post() 发布 JSON 对象
【发布时间】:2011-04-23 15:15:53
【问题描述】:

我在我的 javascript 应用程序中创建了以下对象。

    poll_data[active_question] = {
        'question': $('div.question_wrap textarea').attr('value'),
        'answers':  [
            $('div.answer_wrap input#0').attr('value'),
            $('div.answer_wrap input#1').attr('value'),
            $('div.answer_wrap input#2').attr('value'),
            $('div.answer_wrap input#3').attr('value'),
            $('div.answer_wrap input#4').attr('value'),
            $('div.answer_wrap input#5').attr('value')
        ]
    };

active_question 设置为 'poll'、0、1、2、3、4 或 5,具体取决于当前正在处理的问题。我正在尝试使用以下 JS 代码将此对象发布到 php 脚本。

    $.ajax({
        url:            '/somewebsite/poll/create?json=show',
        type:           'POST',
        // dataType:        'json',
        data:           poll_data,
        contentType:        'application/json; charset=utf-8',
        success:        function(data) {
            alert(data);
        }
    });

我的 PHP 代码很简单。

    echo json_encode($_POST); exit;

当我运行脚本并单击触发数据提交的按钮时,我会收到警报(因此实际的 ajax 代码有效),但我的 PHP 脚本的结果只是一个空数组。我认为这是对象构造方式的问题,但我不确定,也无法找到解决方法。

提前致谢。

【问题讨论】:

  • 所以只是给大家验证一下:问题不在服务器上。服务器没有接收到数据,这是问题所在。

标签: php jquery ajax json post


【解决方案1】:

好的,有几件事:

poll_data 不是有效的 JSON 对象。您必须使用 poll_data[active_question],它是一个有效的 JSON 对象。 jQuery 应该正确地序列化它。删除 contentType - 我很确定这是针对 php 的(不是肯定的),但是在我删除它之前,你的代码对我不起作用。最后,将 json=show 附加到查询字符串不会做任何事情。它只会被忽略。

还有一些小事:您可以使用.val() 代替.attr('value'),您是否查看过.serialize() 来为您创建帖子数据?

【讨论】:

  • 好吧,你没抓住重点。即使将我的 PHP 代码更改为。回声 var_dump($_POST);没有数据,PHP 没有接收到 JSON 对象。
  • 编辑了我的答案——希望对您有所帮助。
  • 好的,很好,帮助很大。我将我的 javascript 代码更改为以下内容。 $.ajax({ url: '/polple/poll/create', type: 'POST', dataType: 'json', data: {'poll': poll_data['poll'], 'a': poll_data[0] , 'b': poll_data[1]}, 成功: function(data) { alert(data); } });现在一切似乎都运行良好。还要感谢您对 .val 而不是 .attr('value') 的提醒,而 ?json=show 实际上是针对我的 PHP 代码的,它告诉代码输出 json 而不是 HTML。感谢您的帮助。
【解决方案2】:

在服务器上执行此操作

$data;
$data->question=$_POST['question']
$data->answer=$_POST['answers']
echo json_encode($data);

ajax 请求执行此操作

 $.ajax({
        url: '/somewebsite/poll/create?json=show',
        type:'POST',
        //modified data proprty
        data:poll_data[active_question],
        success: function(data) {
            alert(data);
        }
    });

【讨论】:

  • 问题在于服务器上没有可用的 POST 数据。
  • 如果做一个简单的 var_dump($_POST);在服务器上我得到以下内容。数组(0){}
  • 请求方法:POST 状态码:200 OK 请求标头接受:application/json, text/javascript, / Content-Type:application/json; charset=UTF-8 Origin:localhostReferer:localhost/polple/poll/create User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari /534.3 X-Requested-With:XMLHttpRequest 响应标头缓存控制:无存储,无缓存,必须重新验证,后检查 = 0,预检查 = 0 连接:保持活动内容长度:13 内容 -类型:text/html Keep-Alive:timeout=5, max=94 Pragma:no-cache
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
相关资源
最近更新 更多