如何使用PHP构造AJAX JSON字符串,以便通过POST发送
我用AJAX编写了一个简单的xmlhttprequest,并想用PHP重建它如何使用PHP构造AJAX JSON字符串,以便通过POST发送,php,ajax,json,Php,Ajax,Json,我用AJAX编写了一个简单的xmlhttprequest,并想用PHP重建它 var data = {}; var payload = { "flags" : true, "codes" : true, "units" : true }; data.payload = JSON.stringify(payload); $.ajax({ type : 'POST', url : 'http://httpbin.org/post', data : da
var data = {};
var payload = {
"flags" : true,
"codes" : true,
"units" : true
};
data.payload = JSON.stringify(payload);
$.ajax({
type : 'POST',
url : 'http://httpbin.org/post',
data : data,
success : function(response) {
var arr = JSON.stringify(response);
document.getElementById('placeholder').innerHTML = arr;
}
});
这个很好用
现在,我的PHP版本:
$data = array(
'payload' => array(
'flags' => true,
'codes' => true,
'units' => true
)
);
$options = array(
"http" => array(
"method" => "POST",
"header" => "Content-Type: application/json\r\n",
"content" => json_encode($data)
)
);
$url = "http://httpbin.org/post";
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
var_dump($response);
当我比较结果时,结构上存在差异。
Ajax如下所示:
{"form":{"payload":"{\"flags\":\"true\",
{"form": {},..."data": "{\"payload\":{\"flags\":\"true\",
PHP如下所示:
{"form":{"payload":"{\"flags\":\"true\",
{"form": {},..."data": "{\"payload\":{\"flags\":\"true\",
为什么PHP中的“表单”是空的?
我尝试了一个额外的数组“form”,但当我查看结果时,字符串中还有第二个“form”。您是否尝试在对数组编码后立即触发
$options = array(
"http" => array(
"method" => "POST",
"header" => "Content-Type: application/json\r\n",
"content" => json_encode($data)
)
);
$error = json_last_error();
echo $error;
如果出现静默json错误,可能会给您一个线索
让我们知道:)您使用了不正确的方式来构建POST数据 试试这个:
$payload = array(
'flags' => true,
'codes' => true,
'units' => true
);
$data = array(
'payload' => json_encode($payload)
);
$options = array(
"http" => array(
"method" => "POST",
"header" => "Content-Type: application/x-www-form-urlencoded\r\n",
"content" => http_build_query($data)
)
);
解释
在JS代码POST中,数据是一个包含一个键值对的对象{“payload”:json}
,其中json
是表示有效负载对象的json编码字符串。此POST数据对象最终(在$.ajax
实现中)生成一个url编码字符串,如下所示:有效负载=%7B%22flags%22%3Atrue%2C%22code%22%3Atrue%2C%22units%22%3Atrue%7D
所描述的过程完全由我的php代码重现。为什么要
JSON.stringify
这个“数据”<代码>$。ajax直接接受完美对象。我只是用“”测试我的请求。但我使用的真正API需要一个JSON字符串。这就是JSON.stringify的原因echo“Error:.json_last_Error();//错误:0似乎正常:(就是这样!你真是个天才!!!我从7个小时开始就试图解决这个问题,但一直没有解决过。但是为什么结果看起来如此不同呢?PHP中的“有效负载”现在看起来和AJAX中的完全不同。但它是行得通的。@Tipo实际上将JS代码结果中的数据发布为与我的PHP代码中相同的外观(字符串)。