我正在尝试将一些json数据从js发送到php,并通过REST将其传递给mongo。
以下输出json字符串(如果我只是将它作为字符串放在PHP文件中,以后工作正常,请参阅下面的代码段。)
JS发送json:
var s = JSON.stringify(send); //s contains previous data in arrays, etc
ic(s);
function ic(s){
var ajaxUrl = './iM.php';
$.getJSON(ajaxUrl,
{da: s},
function(data) {
console.log (data);
});
}
在iM.php中:
$s = $_GET["da"]; // <-- doesn't work
//$s = '{"r":"pax","c":1,"w":["kiwi","melon"],"g":["cat","dog"]}'; //<-- works fine
$opts = array(
"http" => array(
"method" => "POST",
"header" => "Content-type: application/json",
"content" => $s,
),
);
$context = stream_context_create($opts);
$result = file_get_contents("https://api.mongolab.com/api/1/databases/$db/collections/$collection?apiKey=$key", false, $context);
var_dump($result); // Dumps the response document
在firefox调试器中,我可以看到文件实际被调用,但是没有添加数据。
创建了error_log文件: 无法打开流:HTTP请求失败! HTTP / 1.1 400错误请求
我也在php中试过urlencode($ s),仍然无法正常工作。 $ db,$ collection和$ key在php中是不确定的,没问题。
我错过了什么?
答案 0 :(得分:0)
基本上JSON.stringify(send)函数的设计方式使它能让你的json成为你所得到的。
JSON.stringify(value[, replacer[, space]])
您应该正确使用此功能。阅读文档了解更多。 如果你有输入值作为JS数组或JS对象,它基本上是有用的 可以转换成单个字符串。
你得到的是'{/“r /”:/“pax /”,/“c /”:1,如果你试图将一个已经是字符串格式的json字符串化的话。
这些:
var s = ['1','2','3'];
and
var s = "['1','2','3']";
完全不同。
如果您要发送数组或json对象,您甚至可以直接发送它 使用上面的代码。 例如:
send = {"r":"pax","c":1,"w":["kiwi","melon"],"g":["cat","dog"]};
ic(send);
function ic(s){
var ajaxUrl = 'im.php';
$.getJSON(ajaxUrl,
{da: s},
function(data) {
console.log (data);
});
}
确保正确处理php端的数组。 如果你想要返回json,请执行:
$s = $_GET["da"]; //this will be array.
var jsonObject = json_encode($s);
或者您可以在那里进行字符串化然后提供。
或者只是发送字符串然后使用json_decode在php中创建json