我试图抓住比我想要的更多的东西。
假设我有2个输入和一个按钮,按下按钮我想创建一个包含这些输入数据的json并将其发送到服务器。
我认为应该这样做,但我可能错了,因为我已经看到很多不同的(解释不清楚)做类似事情的方法。
var Item = function(First, Second) {
return {
FirstPart : First.val(),
SecondPart : Second.val(),
};
};
$(document).ready(function(){
$("#send_item").click(function() {
var form = $("#add_item");
if (form) {
item = Item($("#first"), $("#second"));
$.ajax ({
type: "POST",
url: "post.php",
data: { 'test' : item },
success: function(result) {
console.log(result);
}
});
}
});
});
在PHP中我有
class ClientData
{
public $First;
public $Second;
public function __construct($F, $S)
{
$this->First = F;
$this->Second = S;
}
}
if (isset($_POST['test']))
{
// do stuff, get an object of type ClientData
}
问题是$ _POST [' test']似乎是一个数组(如果我将它传递给json_decode我得到一个错误,说它是一个数组,如果我使用foreach迭代它我得到我希望看到的价值观)。 那个ajax调用是否正确?我还应该在PHP位中做些什么吗?
答案 0 :(得分:1)
您应指定json的内容类型,并使用JSON.stringify()格式化数据有效内容。
myDataRef.limitToLast(10).on("child_added", function(snapshot) {
var newImg = snapshot.child("url");
console.log(newImg);
});
答案 1 :(得分:1)
发送AJAX请求时,您需要发送有效的JSON。您可以发送一个数组,但在将数据发送到服务器之前需要使用表格有效的JSON。因此,在您的JavaScript代码中形成有效的JSON并将该数据发送到您的端点。
在您的情况下,test
键包含value
,其中包含具有两个属性的JavaScript对象。 JSON是键值以字符串格式编码,您的PHP脚本不是如何处理JavaScript(jQuery)对象。
https://jsfiddle.net/s1hkkws1/15/
这应该有所帮助。
答案 2 :(得分:0)
用于发送原始form
数据:
js部分:
$.ajax ({
type: "POST",
url: "post.php",
data: item ,
success: function(result) {
console.log(result);
}
});
php部分:
..
if (isset($_POST['FirstPart']) && isset($_POST['SecondPart']))
{
$fpart = $_POST['FirstPart'];
$spart = $_POST['SecondPart'];
$obj = new ClientData($fpart, $spart);
}
...
发送json
字符串:
js部分:
$.ajax ({
type: "POST",
url: "post.php",
data: {'test': JSON.stringify(item)},
success: function(result) {
console.log(result);
}
});
php部分:
..
if (isset($_POST['test']))
{
$json_data = $_POST['test'];
$json_arr = json_decode($json_data, true);
$fpart = $json_arr['FirstPart'];
$spart = $json_arr['SecondPart'];
$obj = new ClientData($fpart, $spart);
}
...
答案 3 :(得分:-1)
尝试发送ajax:
data: { 'test': JSON.stringify(item) },
代替:
data: { 'test' : item },