0

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

由于 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.stringify和发送JSON.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>
4

3 回答 3

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);
                            }
});

或者你可以使用这个库来字符串化对象:

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

希望能帮助到你。

于 2012-12-11T16:31:39.363 回答
1

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

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

如果 ajax 请求成功,此行应该[object Object]在您的 div 中为您提供,否则它将什么也不做(这是您当前的结果)。

$("#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 = {};
于 2012-12-11T16:34:44.350 回答
1

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

于 2012-12-11T16:37:16.977 回答