Как я могу создать веб-службу php, используя POST, используя JSON для отправки req/res?

Мне предлагается создать веб-службу, которая использует POST вместо GET и поэтому не должно быть строки запроса. Когда POST-запрос отправляется в /myservice, один объект JSON будет передан с атрибутом, называемым "номерами". Я думаю, что эта спецификация требует формы, которая имеет только два поля, одно текстовое поле для хранения чисел, разделенных запятыми и поле кнопки отправки. 1) Должен ли я использовать JavaScript и/или JQuery для вывода чисел из поля формы и преобразования их в объект JSON? В частности, человек входит в поле формы, с именем/идентификатором "числа", номерами: 2, 3, 4. Это должно быть превращено в нечто вроде этого:

{
 "numbers": [
 2, 3, 4
 ]
 }

Тогда, я думаю, я бы или мог использовать JQuery ajax-методы для отправки строки данных JSON в веб-службу php, которая существует по адресу: http://mydomain.com/myservice. Это нужно отправить без параметров запроса, как уже упоминалось. Служба вернет объект json, представляющий сумму всех чисел, произведение всех чисел и среднее или среднее значение. Таким образом, результат, отправленный назад, будет

{
 "results": {
 "sum": 9,
 "product": 24,
 "average": 3
 }
}

Где я застрял, вероятно, в области, которая проще всего. У меня может быть сообщение формы на той же странице, и тогда я могу проверить JQuery, чтобы увидеть, была ли форма размещена, и если это так, то конвертировать числа, введенные в форму, в объект JSON. Имеет ли JavaScript доступ к переменной $ _POST? Или я должен использовать обработчик событий для ответа на щелчок на кнопке отправки формы. Но как мне получить данные, введенные пользователем, и преобразовать их в объект JSON с параметром "числа?"?

Затем на стороне сервера мне нужно проанализировать объект JSON, выполнить операции над массивом чисел, а затем создать возвращаемый объект результата JSON. Может кто-нибудь предложить некоторые советы, пожалуйста? Я не знаю, должен ли я делать все это на PHP или лучше обработать JQuery/JavaScript на стороне клиента для создания объекта JSON. Спасибо, Брюс

1 ответ

Посмотрите на функцию PHP json_encode. Если ваши номера размещены в одном поле, вы хотите разделить их на разделитель, чтобы сформировать массив, например:

// custom callback function will trim the whitespace
// then convert to an integer
function trimAndConvert($string_number) {
 return (int)trim($string_number);
}

$numbers = explode(',', $_POST['your_numbers']); // get your input from $_POST
$numbers = array_map('trimAndConvert', $numbers); // trim whitespace and convert to int
$numbers = array('numbers' => $numbers); 

$json = json_encode($numbers);

Используйте array_map, чтобы указать на пользовательскую функцию обратного вызова, которая будет обрезать пробелы с ваших взорванных битов (они могут иметь пробелы с обеих сторон и т.д.), А затем преобразовать в целое число. Если вы не конвертируете в целое число, числа выходят в JSON как строки (завернутые в кавычки).

Это даст вам желаемый выход JSON, например:

{
 "numbers": [2, 3, 4]
 }

Отсюда вы можете выполнить запрос POST на этот URL, используя CURL, или одну из нескольких других опций, которые не используют CURL (если у вас ее нет). См. Следующие статьи:

Надеюсь это поможет.

licensed under cc by-sa 3.0 with attribution.