@slip31

Почему PHP не принимает JSON?

Посылаю JSON с index.php
function sendInfo(json) {
                var someObj = JSON.stringify(json);
              // console.log(someObj);
                var xhr = new XMLHttpRequest();               
                xhr.open('POST', 'foo.php',true);
                 xhr.setRequestHeader('Content-Type','application/json; charset=utf-8');                
                xhr.send(someObj);               
                xhr.onreadystatechange = function () {
                    if (this.readyState === 4) {
                        if (this.status === 200)
                             console.log('ok');
                        else
                            console.log('ajax error');
                    }
                };
            }

В консоли Network - XHR - foo.php
Request URL: http://site/foo.php
Request Method: POST
Status Code: 200 OK

RequestPayload
{hash:"sadsdfsafasfasfasfasdfdsaf}
т,е. данные, которые нужны.
в файле же foo.php (который доступен) перебрал всё, что мог)
<?php
error_reporting(~0);
ini_set('display_errors', 1);
var_dump($_POST);
$request_body = file_get_contents('php://input');
echo $request_body;
$post = json_decode($request_body);
print_r($post);
print_r(json_decode(trim(file_get_contents('php://input')),1));

Ничего не пришло. Что я сделал не так?
  • Вопрос задан
  • 254 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Nengchak
RequestPayload
{hash:"sadsdfsafasfasfasfasdfdsaf} -- нормально что нет закрывающей кавычки?

{
	"hash": "sadsdfsafasfasfasfasdfdsaf"
}


вот валидный JSON
Ответ написан
Комментировать
@MaximChistov
Программист на Java и PHP
Скорее всего, у вас отключен fopen для ссылок. (это мера безопасности)
allow_url_fopen - вот эта опция php.ini

Вы можете проверить, включив ее локально только для этого скрипта, для этого перед fopen напишиите:
ini_set("allow_url_fopen", true);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы