Проблемы с отправкой данных JSON на сервер из JavaScript с помощью метода POST - PullRequest
0 голосов
/ 23 июня 2011

Я пытаюсь увидеть данные json, которые я отправил на сервер с помощью XMLHttpRequest, но кажется, что сервер его не получает, когда я запускаю javascript, появляется окно с предупреждением, но ничего не печатается. Кто-нибудь знает, как решить эту проблему? Спасибо

На стороне клиента Java-скрипт

var obj = {"action": "nothing"};

var jsonString = "jsonString=" + JSON.stringify(obj);


var xmlhttp = new XMLHttpRequest();

xmlhttp.open("POST","http://myserver/main.php",true);

xmlhttp.setRequestHeader("Content-type","application/json");
xmlhttp.setRequestHeader("Content-Length",jsonString.length);

xmlhttp.onreadystatechange = function() 
{           
      if(xmlhttp.readyState === 4 && xmlhttp.status === 200){
          alert(xmlhttp.responseText);
      }
}
xmlhttp.send(jsonString);

На сервере php

if(isset($_POST['jsonString'])) 
echo $_POST['jsonString'];

Ответы [ 3 ]

1 голос
/ 15 мая 2012

Решение Джеймса работает просто отлично, но если вы хотите отправлять данные с использованием типа контента application / json, вам придется обращаться к данным по-другому.

За то, что у вас на стороне сервера,

if(isset($_POST['jsonString'])) 
echo $_POST['jsonString'];

изменить это (как Джеймс):

xmlhttp.setRequestHeader("Content-type","application/json");

до

xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

ЕСЛИ ВЫ ХОТИТЕ ИСПОЛЬЗОВАТЬ тип контента application / json, то вы должны изменить способ доступа к нему на стороне сервера с помощью:

    $json_string = file_get_contents('php://input');
    $json_object = json_decode($json_string); 
    echo $json_object->action;
1 голос
/ 23 июня 2011

Вы отправляете данные JSON, но для типа содержимого установлено значение application/x-www-form-urlencoded.Вы должны либо отправить данные формы / закодированные данные (var obj="action=nothing"), либо установить тип содержимого JSON (application/json)

0 голосов
/ 24 июня 2011

Это работает для меня:

<html>
<head>
<script src='json.js'></script>
</head>
<body>

<script>
var obj = {"action": "nothing"};
var jsonString = "jsonString=" + JSON.stringify(obj);
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST","whereIPutThePHP.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-Length",jsonString.length);

xmlhttp.onreadystatechange = function() 
{           
      if(xmlhttp.readyState === 4 && (xmlhttp.status === 200)){
          alert(xmlhttp.responseText);
      } 
}
xmlhttp.send(jsonString);
</script>

</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...