json из js в php - не удалось открыть поток: сбой http-запроса

0

Я пытаюсь отправить некоторые 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, без проблем.

Что мне не хватает?

Теги:

1 ответ

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, чтобы сделать ее json в php

Ещё вопросы

Сообщество Overcoder
Наверх
Меню