Я пытаюсь отправить некоторые json-данные из js в php и передать его в mongo REST.
Следующие выходы json string (это работает позже, если я просто поместил его как строку в файл 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
Я также попробовал urlencode ($ s) в php, все еще не работая. $ db, $ collection и $ key являются defiend в php, без проблем.
Что мне не хватает?
В основном функция 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, чтобы сделать ее json в php