我试图通过jquery.ajax()将JavaScript对象传递给PHP脚本,基本上是:
var bigArray = new Object();
//Dode
//Start loop
bigArray[x] = {name: exname,id: exID,order:e,set: setBox,inc: incBox,example: exampleBox,day: i};
因此,几乎是这些对象的数组.
var anotherTest = $.toJSON(bigArray);
var ajxFile = "routineajax.PHP";
$.ajax({
type: 'POST',processData: false,url: ajxFile,data: anotherTest,success: function(data) {
$('#result').html(data);
alert('Load was performed.');
}
});
});
PHP辅助脚本
print_r($_POST);
$params = json_decode($_POST);
print_r($params)
Ajax调用正在进行中,我可以在Firebug中看到,但是print_r($_ POST)返回一个空数组.虽然如果我在$.ajax函数和PHP脚本中都将其更改为$_GET,则它可以工作.我的主要问题是我收到以下错误消息:
Warning: json_decode() expects parameter 1 to be string,array given in
我该如何解决这个问题?
$data = file_get_contents('PHP://input');
var_dump($data);
var_dump(json_decode($data));
我得到这个输出
string'{"0"{"name":"Decline`Abs","id":"54","order":0,"set":"","inc":"","example":"","day":1}}' (length=87)`
object(stdClass)[2]
public '0' =>
object(stdClass)[4]
public 'name' => string 'Decline Abs' (length=11)
public 'id' => string '54' (length=2)
public 'order' => int 0
public 'set' => string '' (length=0)
public 'inc' => string '' (length=0)
public 'example' => string '' (length=0)
public 'day' => int 1
因此,至少它正在经历,但我不确定如何访问它,朝着正确的方向迈出了一步!
$data = file_get_contents('PHP://input');
var_dump($data);
var_dump(json_decode($data));
看看是否可行.如果没有,请在您的问题中张贴返回的内容(如有).
基于以下注释和对OP的补充.
$data的var_dump是否正确粘贴复制?我问的原因是:字符串'{“ 0” {“ name”在我看来不正确.那不是有效的JSON或正确编码的POST字符串.复制和粘贴时,可能是某些字符已编码.
无论哪种方式,您现在都可以得到所需的结果. stdClass只是一个空白容器,它将数据放入其中,您可以使用常规对象语法对其进行访问.在这种情况下,您必须做$data-> {0}->名称,因为那个0.如果您做$data = json_decode($data,true),它将是一个关联数组,并且您可以以$data [0] [‘name’]的身份访问POST的数据.
如果您想继续探索,在执行ajax请求之前显示window.console.dir(data)的结果可能会有所帮助,并确保在查看var_dump(data)时查看复制和粘贴页面. window.console.dir(data)将在Firebug窗口中显示数据的属性(您正在使用Firebug,对吗?).它也可以在Chrome的调试器中运行,也许也可以在其他调试器中运行.就像我说的那样,您似乎已经可以获取所需的东西,因此无需进行调查.