我一直在将我的代码与网络上的其他示例进行比较,但仍然找不到我的错误。
当我加载页面并单击“提交”时,屏幕上没有任何反应。但是,在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.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>
答案 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会自动从响应的标题中找出它。