通过ajax将jSON数组打印到屏幕到php脚本

时间:2012-12-11 16:25:33

标签: php jquery html ajax json

我一直在将我的代码与网络上的其他示例进行比较,但仍然找不到我的错误。 当我加载页面并单击“提交”时,屏幕上没有任何反应。但是,在Firebug中,我收到POST 200 OK,并且应该在屏幕上的PHP脚本在POST响应选项卡中拼写出来。

由于Firebug的反应是恰当的,我对于出了什么问题感到困惑。

基本HTML表单

<form id="form" action="" method="post">
    <input type="submit" name="submit" id="submit" value="submit"/>
</form>
<div id="results"></div>

jQuery创建一个JS对象。该对象通过JSON.stringifyJSON.parse发送。提交事件处理程序会触发$.ajax。 JSON数据传递给ok.php,它应该在理论上返回脚本中调用的PHP信息。

var addIt = new Object();

addIt.one = "one";
addIt.two = 2;
addIt.three = addIt.one +" + "+ addIt.two +" = "+ "three";

$jsonAddIt = JSON.stringify(addIt);
$jsonAddIt = JSON.parse($jsonAddIt);

$('#submit').click(function(e){
    e.preventDefault();

    $.ajax({
        type: 'POST',
        url: 'ok.php',
        dataType:'json',
        data: ({ json:$jsonAddIt }),
        success:function(data) {
            $("#results").html(data);
        }
    });
});

PHP

<?php
    $ajaxInfo = $_POST["json"];
    if ($ajaxInfo !="")
    {
        echo "info transfered"; 
    }
    else 
        echo "nothing";
?> 

<div id="returned">
    <?php print_r($ajaxInfo); ?>
</div>

3 个答案:

答案 0 :(得分:2)

将dataType设置为JSON将使jQuery ajax请求自动将其解析为Javascript对象。你有两个解决方案。更改ajax请求的dataType:

$.ajax({
                     type:'POST',
                        url: 'ok.php',
                        dataType:'text',
                        data: ({json:$jsonAddIt}),
                        success:function(data){
                             $("#results").html(data);
                            }
});

或者您可以使用this库对对象进行字符串化处理:

$.ajax({
                     type:'POST',
                        url: 'ok.php',
                        dataType:'json',
                        data: ({json:$jsonAddIt}),
                        success:function(data){
                             $("#results").html(JSON.stringify(data));
                            }
});

希望它有所帮助。

答案 1 :(得分:1)

不需要这两行,第二行取消第一行。只需删除它们。

$jsonAddIt = JSON.stringify(addIt);
$jsonAddIt = JSON.parse($jsonAddIt);

如果ajax请求成功,此行应该在你的div中给你[object Object],否则它什么都不做(这是你当前的结果)。

$("#results").html(data)

目前,您的ajax请求实际上是失败的,因为它没有返回预期的JSON数据类型。如果您将dataType更改为“html”,它将起作用。

$.ajax({
    type:'POST',
    url: 'ok.php',
    dataType:'html',
    data: {json:addIt},
    success:function(data){
        $("#results").html(data);
    }
});

另外,

var addIt = new Object();

应该是

var addIt = {};

答案 2 :(得分:1)

我认为问题是你的dataType。通过说json,你告诉jQuery你期待的内容是json。 php可能在标题中将内容类型设置为html。你应该能够删除它,jQuery会自动从响应的标题中找出它。