JSONP
در مورد اخطارهای داده شده باید عرض کنم این یک زبان برنامه نویسی هست و یک مطلب عامیانه نیست ابتدا عین کلمات رو گزاشتم و اخطار اومد همه ترجمه بشه من padding رو چی ترجمه کنم که به اینجا بیاد؟ ساعتها وقتم رو گرفت چون در هیچ جای زبان فارسی برای این مورد مقاله ای نیست. نسخه انگلیسی هم ترجمه کنید تا بدونید ماشینی چیه!!! لطفا منطقی و با توجه به موضوع نظر بدید نه مقاله در مورد یک باغ رو با یک مطلب فنی مقایسه کنید
جیسون لایه دار ( JSON-P[۱]) یک الگوی جاوا اسکریپت برای درخواست داده با بارگیری یک برچسب
<script>
. این مورد توسط Bob Ippolito Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead. در سال ۲۰۰۵ ارائه شد.[۲] JSONP بدون اینکه مانند ایجکس نگرانی بابت اشتراک منابع متقابل ( cross-domain policy Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead. ) داشته باشد اشتراک گذاری داده ها را امکان پذیر میکند, Jsonp ترکیبی از تابع جاوااسکریپت و جیسون است. بدینشکل که تابع خود را در مکان دیگر مقدار دهی کرده و در آدرس خود فراخوانی و اجرا مینمایید.
عملکرد[ویرایش]
عنصر اچ تی امال <script>
مجاز به اجرای محتوای برگرفته از منابع خارجی است. سرویس های پاسخ داده با داده های JSON Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead. خالص قادر به اشتراک گذاری داده ها در دامنه قبل از تصویب CORSTransclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead. (اشتراک منابع متقابل) نبودند. به عنوان مثال ، یک درخواست به یک سرویس خارجی http://server.example.com/Users/1234
ممکن است یک رکورد برای یک شخص بنام فرضی "پارس" را با فرمت جیسون برگرداند. بشکل زیر:
{
"Name": "پارس",
"Id": ۱۲۳۴,
"Rank": ۷
}
هنگام استفاده از داده ها بشکل فوق در دامنه ها منجر به خطای جاوااسکریپت خواهد شد. زیرا جاوا اسکریپت قادر نیست دیتای چیسون را بشکل خام بدون کمک گرفتن از ایجکس از منابع خارجی برگرداند
<script type="application/javascript"
src="http://server.example.com/Users/1234">
</script>
مرورگر پرونده <script>
را بارگیری می کند ، محتوای آن را ارزیابی می کند ، داده های JSON خام را به عنوان یک بلاک تفسیر می کند و خطای نحوی ( syntax Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead.) را برمیگرداند. حتی اگر داده ها به عنوان یک چهارچوب جاوااسکریپت تعبیر شوند ، همچنان نمی توان با جاوااسکریپتی که در مرورگر اجرا می شود ، دسترسی پیدا کرد ، زیرا بدون تعیین تکلیف متغیر ، اعضای شیء غیرقابل دسترس هستند.
در الگوی استفاده JSONP ، درخواست نشانی وب که به صفت src
در عنصر <script>
اشاره شده است داده های JSON Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead. را بازمی گرداند ، با کد جاوااسکریپت (معمولاً یک تابع) که در اطراف آن پیچیده شده است. این "بار مقدار دهی شده" و سپس توسط مرورگر اجرا می شود. به این ترتیب ، تابعی که قبلاً در محیط جاوااسکریپت تعریف شده است می تواند داده های Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead. را مقدار دهی کند. یک درخواست و پاسخ معمولی JSONP در زیر نشان داده شده است.
اگر این محتوا:
parseResponse({"name":"mahmoud", "fname":"mansouri", "age":۳۵, "city":"shiraz", "webSite":"۱mansouri.ir"});
در یک آدرس خارجی قرار داشته باشد به آدرس فرضی:
http://server.example.com/Users/1234
در هر آدرسی که به آن نیاز است با کمک صفت src
در عنصر <script>
فراخوانی گردد. و کافیست تابع parseResponse
را ساخته و بتمام مقادیر آن دسترسی داشته باشید. بدون نگرانی بابت اشتراک منابع متقابل (cross-domain policy).
تزریق عنصر اسکریپت[ویرایش]
JSONP Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead. فقط هنگامی که از عنصر اسکریپت استفاده می شود معقول است. برای هر درخواست JSONP جدید ، مرورگر باید یک عنصر <script>
جدید اضافه کند ، یا از مورد قبلی دوباره استفاده کند. گزینه قبلی - اضافه کردن یک عنصر اسکریپت جدید - از طریق دستکاری مدل شیگرای سند (DOM Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead. ) امکان پذیر است. و به عنوان تزریق عنصر اسکریپت شناخته می شود. عنصر <script>
به مدل شیءگرای سند HTML) (Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead.DOM تزریق می شود ، با نشانی وب (URL Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead.) انتهای مورد نظر JSONP به عنوان ویژگی src
تنظیم می شود. این تزریق عنصر اسکریپت پویا معمولاً توسط یک کتابخانه جاوااسکریپت انجام می شود. جیکوئری و چهارچوب های دیگر توابع و چهارچوب های لازم برای JSONP دارند. گزینه های مستقل نیز وجود دارند.
نمونه ای از استفاده از جیکوئری برای تزریق پویا عنصر اسکریپت برای تماس JSONP به این شکل است [۳]:
// Using YQL and JSONP
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql",
// The name of the callback parameter, as specified by the YQL service
jsonp: "callback",
// Tell jQuery we're expecting JSONP
dataType: "jsonp",
// Tell YQL what we want and that we want JSON
data: {
q: "select title,abstract,url from search.news where query=\"cat\"",
format: "json"
},
// Work with the response
success: function( response ) {
console.log( response ); // server response
}
});
منابع[ویرایش]
- ↑ "Safer cross-domain Ajax with JSON-P/JSONP". JSON-P.org. Archived from the original on March 4, 2016. Retrieved 2011-10-30.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ Ippolito, Bob (December 5, 2005). "Remote JSON - JSONP". Bob Ippolito on Haskell, Python, Erlang, JavaScript, etc. (به English). Archived from the original on 2012-06-08. Retrieved 2017-02-10.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ js.foundation، JS Foundation-. «Working with JSONP | jQuery Learning Center» (به English). دریافتشده در ۲۰۱۹-۰۹-۲۵.صفحه پودمان:Citation/CS1/fa/styles.css محتوایی ندارد.
پیوند به بیرون[ویرایش]
- https://www.w3schools.com/js/js_json_jsonp.asp
- https://stackoverflow.com/a/8430374/11811807
- JSONP data source for remote domains
This article "JSONP" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:JSONP. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.
This page exists already on Wikipedia. |