Отправка json php: cURL Отправить JSON на сервер POST запросом

Django | Отправка json

Последнее обновление: 19.08.2022

За отправку клиенту данных в формате JSON в Django отвечает специальный класс — JsonResponse,
который по сути представляет подкласс HttpResponse. Основная особенность JsonResponse состоит в том, что
при отправке данных он автоматически устанавливает для заголовка Content-Type (тип содержимого) значение
application/json

Его конструктор принимает ряд параметров:

def __init__(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs)
  • data: отправляемые данные

  • encoder: сериализатор, которые сериализует отправляемые данные в формат JSON. По умолчанию представляет
    тип django.core.serializers.json.DjangoJSONEncoder

  • safe: представляет булевое значение. Если равно False, то сериализации подлежит любой объект.
    Если же равно True, то отправляемые данные должны представлять тип dict — то есть словарь. По умолчанию равно True

  • json_dumps_params: словарь аргументов, который передается в функцию json.dumps() для генерации ответа

Например, отправим какие-нибудь данные в формате JSON. Для этого определим в файле views.py следующий код:


from django.http import JsonResponse

def index(request):
    return JsonResponse({"name": "Tom", "age": 38})


В данном случае отправляется словарь с двумя элементами name и age. И при обращении в браузере к функции index мы увидим эти данные:

Сериализация произвольных объектов

По умолчанию JsonResponse сериазует и отправляет только словари. Однако что, если мы хотим отправить объект какого-то своего типа? В этом случае неоьходимо
определить класс-сериализатор, который будет содержать логику сериализации объекта в json. Например:


from django.http import JsonResponse
from django.core.serializers.json import DjangoJSONEncoder

def index(request):
    bob = Person("Bob", 41)
    return JsonResponse(bob, safe=False, encoder=PersonEncoder)

class Person:
 
    def __init__(self, name, age):
        self. name = name    # имя человека
        self.age = age        # возраст человека

class PersonEncoder(DjangoJSONEncoder):
    def default(self, obj):
        if isinstance(obj, Person):
            return {"name": obj.name, "age": obj.age}
            # return obj.__dict__
        return super().default(obj)


В данном случае JsonResponse отправляет объект типа Person, у которого определены два атрибута: name и age.

Объект Person не является словарем, поэтому параметр safe имеет значение False. Кроме того, параметр encoder
указывает на сериализатор, который будет сериализовать данные в json. В данном случае это класс PersonEncoder.

Класс сериализатора наследуется от django.core.serializers.json.DjangoJSONEncoder. Он реализует метод
default, который возвращает сериализованный объект. В частности, в этом методе сначала проверяем, представляет ли параметр объект Person. И если
представляет, то возвращаем словарь из значений атрибутов объекта

return {"name": obj.name, "age": obj.age}

Стоит отметить, что в данном случае мы можем просто возвратить представление объекта в виде словаря

return obj.__dict__

Однако в отдельных ситуациях может потребоваться более тонкая настройка сериализации.

Если же объект не представляет тип Person, то передаем его в реализацию метода default родительского класса.

Результат при обращении в браузере:

НазадСодержаниеВперед

Как отправить форму без перезагрузки страницы (AJAX)

Что такое AJAX

Ajax — это технология, позволяющая выполнять обработку действий пользователя без перезагрузки страницы. Иными словами, для примера, когда вы слушаете музыку в социальных сетях, вы можете переходить по страницам, но при этом музыка у вас не прерывается.

Технология Ajax стала неотъемлемой частью WEB 2.0 и в настоящий момент, успешные веб-сайты стремятся создать удобство для пользователей. Более того, технология Ajax позволяет увеличить скорость работы вашего сайта, за счет того, что пользователю для обновления некоторых элементов вашего сайта не нужно перезагружать всю страницу.

 

Реализация отправки формы без перезагрузки страницы

 

Наш демонстрационный проект будет состоять из трех файлов:

index.php — это главная страница с формой
ajax.js — это javascript файл с логикой ajax обработки формы
action_ajax_form.php — это серверная часть нашего проекта, обрабатывает данные полученные из формы и возвращает результат в формате JSON

 

Создадим первый файл нашего AJAX проекта под названием index.php с таким содержимым:

 

Мы подключили библиотеку Jquery и наш javascript файл отвечающий за взаимодействие с кнопкой отправки форми, с файлом action_ajax_form.php. 

Обратите внимание, что метод отправки формы у нас POST, задан и action=»». Также после формы мы добавили div c id=result_form. Именно в этот div мы будем выводить результат обработки формы.

 

Также нам нужно создать второй файл — ajax.js

 

В файле ajax.js есть два метода: $(«#btn»).click и sendAjaxForm. Первый метод — это слушатель событий кнопки. То есть, когда мы нажимаем на кнопку Отправить, слушатель срабатывает и вызывает второй метод sendAjaxForm. 

В метод sendAjaxForm(result_form, ajax_form, url) передаются поля: result_form — это div в который будут рендерится данные, ajax_form — это id формы отправки сообщения и url — это местоположение файла action_ajax_form.php который отвечает за серверную часть (обработка формы).

 

И третий файл под названием action_ajax_form.php

 

action_ajax_form.php — обработчик формы на стороне сервера. Для примера, мы делаем проверку: Если существуют переменные в POST запросе name и phonenumber, тогда мы формируем массив $result для JSON ответа от сервера. Затем, массив $result мы переводим в JSON объект, чтобы клиент ajax.js смог корректно получить данные в формате JSON. 

 

Выводы

Как вы видите, реализовать AJAX отправку данных формы, без перезагрузки страницы очень просто. Скачать исходный код AJAX формы, вы можете по ссылке. Файлы загрузите на ваш локальный сервер или хостинг, распакуйте и сложите все файлы в один каталог сервера.

Если есть вопросы, относительно этой статьи, оставляйте свои комментарии и мы попробуем помочь разобраться, если что-то не заработает.



Читайте также

Что такое NodeJS и npm?

XAMPP — как установить и настроить на Mac (Mojave, Sierra)

Как самостоятельно изучить веб-программирование

Взломали Cкайп, что делать?

Что такое реферальный спам в Google Analytics

Постраничная ленивая загрузка (lazy load) постов

Как стать профессиональным веб-разработчиком

Методы setTimeout и setInterval в Javascript

Реализация Lazy Load на Jquery

Три полезных CSS свойства для работы с изображениями

Массивы в Javascript

Что такое TypeScript

CSS3 — Эффект вращения

Sublime Text 3 — удобный редактор кода для веб-разработчиков

Установка и настройка веб-сервера для сайта в Ubuntu

Полезные приложения для веб-разработчиков в Google Chrome

Модальное окно на Jquery

GIT команды: Быстрый старт для новичков

Что такое конструктор в объектно-ориентированном программировании

Что такое объектно-ориентированное программирование

Как быстро создать сайт и привлечь поисковый трафик

Bitbucket: Крутой облачный GIT репозиторий

Javascript: Классы в Javascript

Что такое веб-хостинг и как выбрать хостинг для сайта

SQL запросы: Основы администрирования MySQL

Команды Linux: оболочка BASH

Joomla CMS: Преимущества и недостатки

Качественный сайт: семь ключевых свойств


Все материалы с сайта wh-db. com и ru.wh-db.com защищены авторским правом. Копирование, публикация, продажа и распространение материала строго запрещены.

Please enable JavaScript to view the comments powered by Disqus.

Как отправить данные JSON из Javascript в PHP

Как я могу отправить данные JSON из Javascript в браузере на сервер, чтобы там их анализировал PHP?

  • HTML
  • CSS
  • JavaScript
  • филиппинов
  • ларавель

6 июля 2020 г.

в Java-скрипте

к
картик

• 37 510 баллов

4,983 просмотра

1 ответ на этот вопрос.

0 голосов

Связанные вопросы в Java-Script

Привет @картик,
Вы на самом деле не получаете к нему доступ, вы … ПОДРОБНЕЕ

ответил

6 июля 2020 г.

в Java-скрипте

к
Нирой

• 82 860 баллов

6 502 просмотра

  • HTML
  • CSS
  • JavaScript
  • ларавель
  • филиппинов
  • майскл
  • linux-база данных
  • линукс

Привет,
Вы можете создать файл javascript через . .. ПОДРОБНЕЕ

ответил

29 апр, 2020

в Java-скрипте

к
Нирой

• 82 860 баллов

11 424 просмотра

  • HTML
  • JavaScript
  • CSS
  • филиппинов
  • ларавель

Привет @картик,
Сначала вы можете пройти:
окно.местоположение.поиск
Это будет … ПОДРОБНЕЕ

ответил

29 апр. 2020 г.

в Java-скрипте

к
Нирой

• 82 860 баллов

1574 просмотра

  • HTML
  • CSS
  • JavaScript
  • филиппинов
  • угловой
  • ларавель

Привет @kartik,
Можно перечислить все… ПОДРОБНЕЕ

ответил

8 июня 2020 г.

в Java-скрипте

к
Нирой

• 82 860 баллов

117 443 просмотра

  • HTML
  • CSS
  • JavaScript
  • ларавель
  • филиппинов

Привет @картик,
Сначала вы должны пойти в … ПОДРОБНЕЕ

ответил

18 марта 2020 г.

в Ларавеле

к
Нирой

• 82 860 баллов

19,544 просмотров

  • HTML
  • CSS
  • JavaScript
  • ларавель
  • угловой
  • филиппинов

Именованный маршрут используется для предоставления конкретных . .. ПОДРОБНЕЕ

ответил

18 марта 2020 г.

в Ларавеле

к
Нирой

• 82 860 баллов

2337 просмотров

  • HTML
  • CSS
  • JavaScript
  • ларавель
  • филиппинов

Привет,
Это просто, вам просто нужно … ПОДРОБНЕЕ

ответил

23 марта 2020 г.

в Ларавеле

к
Нирой

• 82 860 баллов

2082 просмотра

  • HTML
  • CSS
  • JavaScript
  • ларавель
  • филиппинов

Привет @картик,
Именованная маршрутизация — еще одна замечательная особенность … ПОДРОБНЕЕ

ответил

23 марта 2020 г.

в Ларавеле

к
Нирой

• 82 860 баллов

33 709 просмотров

  • HTML
  • CSS
  • JavaScript
  • ларавель
  • филиппинов

Привет @картик,
Просто используйте один из следующих … ПОДРОБНЕЕ

ответил
6 июля 2020 г.
в Java-скрипте
к
Нирой
• 82 860 баллов

1260 просмотров

  • PHP
  • HTML
  • CSS
  • JavaScript
  • ларавель

Привет @kartik,
Вы можете использовать Simple JSON для PHP.