JSONP (англ. JSON with padding, «JSON з підкладкою») є розширенням JSON, коли ім'я функції зворотного виклику вказується як вхідний аргумент.
В основу технології покладено той факт, що політика безпеки браузера дозволяє використовувати тег <script type="text/javascript" src="..."></script>
для звернення до сторонніх доменів.
Спочатку ідея була запропонована в блозі MacPython в 2005 році [1], і зараз використовується багатьма Web 2.0 застосунками, такими, як Dojo Toolkit Applications, Google Toolkit Applications, Kendo UI [2] і zanox Web Services. Подальші розширення цього протоколу були запропоновані з урахуванням введення додаткових аргументів, як, наприклад, у JSONPP [3] за підтримки S3DB вебсервісів.
Без використання технології JSONP (тобто використовуючи просто JSON кодування даних) сервер може повернути тільки дані. Наприклад так:
{"paper": "A4", "count": 5}
Однак це лише дані та вони не можуть впливати на браузер.
Використовуючи JSONP, сторонньому серверу передається в рядку виклику (GET) ім'я callback функції:
<script type="text/javascript" src="http://example.com/getjson?jsonp=parseResponse"></script>
Тут параметр jsonp містить ім'я callback функції parseResponse.
Тепер сторонній сервер example.com може повернути такий код:
parseResponse({"paper": "A4", "count": 5})
Тепер код викликає javascript-функцію першого домену.
Оскільки JSONP використовує скрипт-теги, виклики відкриті світу. З цієї причини, JSONP може бути недоречними для зберігання конфіденційних даних[4].
Включення скриптових тегів від віддалених сайтів дозволяє їм передати будь-який контент на сайті. Якщо віддалений сайт має вразливості, які дозволяють виконати Javascript ін'єкції, то початковий сайт також може зачеплений ними.