如何通过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     
Amount:
firstName:
lastName:
email:

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格式查看响应的更简单快捷的方法。