如何通过jQuery Ajax发布数据在PHP中编码JSON?
我有一个HTML表单,并在点击提交按钮时将数据发送到php文件。
$.ajax({ url: "text.php", type: "POST", data: { amount: amount, firstName: firstName, lastName: lastName, email: email }, dataType: "JSON", success: function (data) { console.log("ok"); $("#result").text(data); } });
在PHP中:
$amount, "firstName" => $firstName, "lastName" => $lastName, "email" => $email ); echo json_encode($data); } ?>
结果是[对象对象]。 我想要一个类似的类型:
{"Amount":"12.34", "FirstName":"Any", "LastName":"Tester", "Email":"a.test@something.com"}
我做错了什么?
使用JSON.stringify的代码示例:
jQuery Test
text.php
$amount, "firstName" => $firstName, "lastName" => $lastName, "email" => $email ); echo json_encode($data); } ?>
您的对象很可能正确传递。 正如@Spudley解释的那样,这是你捕获返回[object object]
的结果的方式。 控制台不知道如何显示构造,但您可以使用object.attribute
语法显示特定属性。 在JS端使用console.log()
或在下面的代码中使用美化输出。
// Indent with tabs // Data is the parameter sent to the success function in the ajax handler JSON.stringify( data , null, '\t');
从如何在(unix)shell脚本中打印JSON?
如果您感觉某处有错误,也暂时删除ajax处理程序上的dataType
。 获取要在GET请求上显示的输出应该这样做。 对于修改数据库删除或更改等操作的任何操作,请将此更改回POST。
最后,修改标题,如@ GroovyCarrot的答案所示。 如果您正在使用Chrome,则额外的空格似乎是一个错误: Tab并预先包装在Chrome中的JSON输出
尝试添加
header('Content-type: application/json');
在PHP脚本的顶部,看看你得到了什么
希望有所帮助!
编辑:忘了提到你应该像这样访问你的值: data.amount
您不能直接将JSON对象插入dom。 JSON对象toString()
方法总是给你[对象对象],这就是你得到它的原因。 您必须使用JSON.stringify(data)
解析数据,或者必须运行$.each(data,function(val){ $("#result").append(val) })
。
您将结果对象转换为字符串而不是显示它。
而不是结果,如果你想在某个包装器里面打印对象,你可以这样做:
var text = '{'; for(var i in data) { var value = data[i]; text += '"'+i+'":"'+value+'", '; } text += '}'; $('#result').text(text);
但您可能会认为console.log
是以json格式查看响应的更简单快捷的方法。