jQuery Ajax اطلاعات را از یک دامنه دیگر دریافت کنید. AJAX متقاطع با جی کوئری

دسامبر 2 , 2016

هنگامی که مقاله ای نوشتم چگونه می توان ویدجت های داخلی را در جاوا اسکریپت بومی و پی اچ پی ایجاد کرد. و همه چیز خوب خواهد بود، اما یک لحظه آن را تحت تاثیر قرار نمی دهد. چنین ویدجت ها را می توان در سایت خود استفاده کرد، اما جالب تر است که آنها را برای منابع شخص ثالث ایجاد کنید. اما در این مورد، مرورگر داده مورد نظر باید از یک دامنه دیگر بارگیری شود - این درخواست های متقابل دامنه AJAX است.

از نقطه نظر برنامه نویسان Frontend، درخواست های متقابل دامنه ای متفاوت از عادی نیست. اما در Bekend تفاوت وجود دارد. چرا با آنها همه چیز خیلی ساده نیست و چگونه آنها را اجرا کنید - در مورد آن در مقاله بخوانید.

ما سعی می کنیم اطلاعات را از یک دامنه دیگر دریافت کنیم

برای سادگی، درخواست دریافت کنید. فرض کنید سرور یک فایل HTML خاص است، که لبه ما را به ما می دهد که چگونه AJAX-OHM را از یک دامنه دیگر دانلود کنید. آن را باز کنید و مطمئن شوید که واقعا در دسترس است - (در یک برگه جدید باز می شود). این یک div معمولی با متن "محتوا از template.html" است.

و اکنون اجازه دهید این HTML-KU AJAX-OHM را مستقیما از کنسول مرورگر دریافت کنیم.

ما با استفاده از جاوا اسکریپت بومی، و با رانندگی یک درخواست با استفاده از jQuery.Get () و به کنسول به آنچه که در پاسخ از سرور دریافت می کنند، به دست آوریم.

$ .. HTML "، عملکرد (RESPONCE) (RESPONCE)))؛

اکنون ابزار توسعه دهنده را در مرورگر و در برگه کنسول باز کنید، این درخواست را انجام دهید.

شما در مورد موارد زیر خواهید دید

همه چیز فوق العاده است، یک درخواست ارسال کرد، پاسخی دریافت کرد. به نظر می رسد که می تواند ساده تر باشد؟ و حالا به هر سایت دیگری که جی کوئری متصل است بروید و سعی کنید همین کار را انجام دهید. فقط در سایت HTTPS نیست، چرا - در پایان مقاله یاد بگیرید.

به عنوان مثال، درخواست ها را در سایت فوتبال Bombardir.ru بررسی کردم. و در عین حال، او آزاد شد، که زباله به کنسول نمی افتد حتی در چنین سایت های شناخته شده. با این حال، گفتگو در مورد آن نیست.

یک درخواست از یک دامنه دیگر را انجام دهید و کنسول دیگر چنین تصویر مبهم را مشاهده خواهید کرد. می گوید، غیر ممکن است برای دانلود، هیچ اطلاعات و به طور کلی غم و اندوه.

اگر برگه شبکه را باز کنید و یک پرس و جو مربوطه را پیدا کنید، سرور را نیز مشاهده خواهید کرد
و هیچ فایل محتوا وجود ندارد. گرفتن چیست؟

چه اتفاقی افتاده است و تصمیم چیست؟

گرفتن این است که سیاست های اینترنت به مرورگرها اجازه نمی دهد که اطلاعات را از هر گونه منابع بیرون بیاورند. علاوه بر مواردی که این منابع خود را به توزیع داده های خاص علاقه مند هستند.
مورد ما چنین است. برای اجازه دادن به استفاده از فایل HTML از هر کجا، شما می خواهید یک هدر HTTP دسترسی به کنترل کنترل دسترسی به کنترل را در هنگام درخواست فایل ارسال کنید.

در حال حاضر سوال این است که چگونه آن را انجام دهید. اگر شما (یا مدیران) به nginx دسترسی داشته باشید، سپس به یک راه برای پیکربندی آلودگی این هدر به ابزارهای وب سرور. شما به مدیران با درخواست مناسب یا Google خودتان پیکربندی های مورد نظر خود را برای سرور وب خود می روید.

اگر این دسترسی وجود نداشته باشد، مثلا، به عنوان مثال، در تقریبا هر ارائه دهنده میزبانی در تعرفه ارزان قیمت، شما باید خودتان را بیرون ببرید. و در اینجا پی اچ پی به نجات می رسد. ایده این است که HTML-KU ما را به یک فایل پی اچ پی بفرستیم، که توسط عنوان منتقل می شود و محتوای مورد نظر را ارائه می دهد.

به نظر می رسد که شما فایل template.php را ایجاد می کنید و رشته اول دستور PHP را بنویسید

سربرگ ("دسترسی به کنترل-اجازه-منبع: *")؛

محتوا از template.php.

به این معنی، محتویات template.php خواهد بود، در مورد پی اچ پی و براکت ها فراموش نکنید

فایل در WebDevkin ایجاد شده و دروغ (در برگه جدید باز می شود). بگذارید اکنون سعی کنیم آن را از یک دامنه دیگر درخواست کنیم و ببینیم چه اتفاقی خواهد افتاد

$ .. پی اچ پی "، تابع (responce))؛

همانطور که می بینید، همه چیز خوب کار می کند - فایل بارگذاری شده است!

نگاهی به برگه شبکه
لطفا توجه داشته باشید که هدر هدر کنترل اجازه میتواند به بلوک پاسخ دهنده علاقه مند باشد.

به طور کلی، مقاله تکمیل شده است. این برای جمع آوری افکار در یک دسته باقی می ماند و اطلاعات بیشتری را اضافه می کند.

خلاصه و خلاصه

  • 1. غیر ممکن است به راحتی درخواست AJAX هر منبع از یک دامنه دیگر
  • 2. ارسال هدر کنترل دسترسی به کنترل دسترسی به تمام منابع که دسترسی به آن را می توان مورد نیاز است.
  • 3. آن را با یک سرور وب یا پی اچ پی انجام دهید
  • 4. بر روی پی اچ پی، این هدر توسط فرمان هدر ارسال می شود ("دسترسی به کنترل-اجازه-منبع: *")
  • 5. دسترسی به کنترل- اجازه-منبع: * - اجازه دسترسی به تمام دامنه ها، دسترسی به کنترل-اجازه-منبع: site.ru - فقط دامنه site.ru
  • 6. دسترسی به کنترل-اجازه-منشا در ابتدای فایل پی اچ پی، حتی قبل از خروجی داده های دیگر (و همچنین هر نوع سرفصل های دیگر HTTP) ارسال می شود
  • 7. "Resource" نه تنها یک فایل با نشانه گذاری HTML است، بلکه هر نشانی اینترنتی که درخواست AJAX می آید، به عنوان مثال، دریافت یک داده JSON یا یک درخواست پست برای اضافه کردن یک رشته به جدول پایگاه داده

و آخرین، به طور جداگانه انجام شد. من به دنبال انجام درخواست ها از سایت HTTP نیستم. با HTTPS امکان بارگیری داده ها از HTTP را برای یک دلیل دیگر - محتوای مخلوط وجود نخواهد داشت. و سایت هنوز HTTP سایت است ( به روز شده: دیگر سایت را در https به تعویق افتاده است)

این چیزی است که شما در کنسول مشاهده خواهید کرد، تلاش می کنید درخواست مشابهی از هر سایت HTTPS را انجام دهید. بنابراین، اگر قصد دارید در ویدجت های جاسازی شده یا چیزی شبیه به آن شرکت کنید، مطمئنا باید یک گواهی SSL را در سایت خود قرار دهید.

jquery.ajax () - یک درخواست را به سرور بدون راه اندازی مجدد صفحه انجام می دهد. این یک روش پایین سطح است. مقدار زیاد تنظیمات. این بر اساس کار تمام آژاکس است که اغلب آسان تر برای درک و استفاده است، اما هنوز هم عملکرد محدودی را نسبت به این روش ارائه می دهد.

$ .AJAX () شی XMLHTTPREQUEST را باز می کند. در اغلب موارد، شما نیازی به کار به طور مستقیم با این شیء نیست، اما هنوز هم در دسترس است، در صورتی که شما نیاز به قطع درخواست به صورت دستی.

به عنوان یک استدلال، عملکرد $ .ajax () یک شی متشکل از یک جفت کلید / مقدار، که برای راه اندازی و مدیریت درخواست استفاده می شود منتقل می شود.

درخواست AJAX دارای دو گزینه استفاده است:

jquery.ajax (URL [، تنظیمات])

تفاوت از نسخه قبلی روش شامل تنها این است که اموال URL در اینجا بخشی از تنظیمات است، و نه یک پارامتر جداگانه.

لیست تنظیمات (تنظیمات)

  1. قبول می کند(به طور پیش فرض: به DataType بستگی دارد)
    نوع: شی
    هنگام اجرای پرس و جو، هدرها (هدر) نشان می دهد که انواع قابل قبول محتوا از سرور انتظار می رود. مقادیر این نوع از پارامتر پذیرش گرفته می شود. به عنوان مثال، مثال زیر نشان دهنده انواع مجاز CustomType است:

    $ .ajax (Acceptptes: (MyCustomType: "Application / X-Some-Custom-type")، مبدل: ("Text MyCustomType": تابع (نتیجه) (بازگشت NewResult؛))، DataType: "MyCustomype"))؛

    $ آژاکس ((

    پذیرش: (

    myCustomType: "برنامه / X-some-custom-type"

    مبدل: (

    "متن mycustustype": تابع (نتیجه) (

    بازگشت NewResult؛

    dataType: "MyCustomType"

    } ) ;

  2. async (به طور پیش فرض: درست است)
    نوع: ارزش منطقی
    به طور پیش فرض، تمام درخواست ها به صورت یکپارچه ارسال می شوند (یعنی پس از ارسال یک درخواست به سرور، صفحه کار خود را متوقف نمی کند در حالی که منتظر پاسخ است). اگر شما نیاز به ارسال پرس و جو همزمان، این گزینه را در اشتباه تنظیم کنید. درخواست های Crossdomain و درخواست های نوع "JSONP" را نمی توان در حالت همزمان انجام داد. لطفا توجه داشته باشید که درخواست های همزمان می تواند مرورگر را در طول زمان اجرا مسدود کند.
  3. beforesert (jqxhr، تنظیمات)
    نوع: تابع
    شامل یک تابع است که بلافاصله قبل از ارسال درخواست AJAX به سرور نامیده می شود. این تابع می تواند مفید باشد برای اصلاح JQXHR شی (در نسخه های اولیه کتابخانه ها (تا 1.5)، به جای JQXHR از XMLHttpRequest استفاده می کند). به عنوان مثال، شما می توانید هدر های لازم را تغییر دهید / مشخص کنید (هدایا) i.d. شی JQXHR به اولین تابع استدلال منتقل خواهد شد. استدلال دوم، تنظیمات پرس و جو را منتقل می کند.
    Beforesend به رویدادهای آژاکس اشاره دارد. بنابراین، اگر تابع مشخص شده در آن را به دست آورد نادرست، پرس و جو AJAX لغو خواهد شد. Beforesend به طور مستقل از نوع پرس و جو نامیده می شود.
  4. کش (به طور پیش فرض: درست، نادرست برای "اسکریپت" و "JSONP")
    نوع: ارزش منطقی
    اگر می خواهید مرورگر درخواست را ذخیره نکنید، سپس این پارامتر را به اشتباه تنظیم کنید. لطفا توجه داشته باشید که اگر پارامتر به اشتباه تنظیم شود، رشته "_ \u003d" به URL اضافه می شود.
  5. کامل (JQXHR، TEXTSTATUS)
    نوع: تابع
    یک تابع که هر بار پس از اتمام پرس و جو AJAX (پس از موفقیت و خطا تکمیل شده) اجرا می شود. دو پارامتر به تابع منتقل می شود: JQXHRHR (در نسخه های اولیه کتابخانه (تا 1.5)، به جای JQXHR از XMLHttpRequest استفاده می کند) و وضعیت اجرای پرس و جو (مقدار رشته: "موفقیت"، "NotModified"، " خطا "،" Timeout "،" Abort "، یا" ParserError ").
    شروع با jQuery-1.5، پارامتر کامل می تواند یک تابع را انتقال دهد، بلکه مجموعه ای از توابع است. تمام توابع به ترتیب که در آن آرایه مشخص می شود، ایجاد می شود.
  6. فهرست.
    نوع: شی
    پارامتر ظاهر شد در jQuery-1.5 در Object فرمت (رشته: عبارات منظم) تنظیم شده است و تعیین می کند که چگونه جی کوئری پاسخ را از سرور جدا می کند، بسته به نوع آن.
  7. نوع محتوا.
    نوع: مقدار منطقی یا رشته.
    هنگام ارسال یک درخواست به سرور، داده ها در فرمت مشخص شده در محتوا منتقل می شود. به طور پیش فرض، "برنامه / X-www-form-urlencoded؛ charset \u003d UTF-8 '، که در اکثر موارد مناسب است. اگر این پارامتر را مشخص کنید، به صراحت، به سرور منتقل می شود (حتی اگر هیچ اطلاعاتی وجود نداشته باشد).
    با jQuery-1.6 شما می توانید FALSE را ارسال کنید تا عنوان را نصب نکنید.
  8. متن نوشته.
    نوع: شی
    جسم که پس از اجرای پرس و جو (مقدار انتقال به این متغیر) زمینه می شود. به عنوان مثال، اگر یک عنصر DOM را به عنوان یک زمینه مشخص کنید، تمام دستگیره های درخواست AJAX نیز در زمینه این عنصر DOM انجام می شود. در این مثال کلمه کلیدی این شامل سند است. بدن:

    $ .ajax (URL: "test.html"، Context: Document.Body)). انجام شده (عملکرد () ($ (این) .addclass ("انجام شده")؛))؛

    $ آژاکس ((

    uRL: "test.html"،

    زمینه: سند بدن

    ))) انجام شده (تابع () (

    $ (این). AddClass ("انجام شده")؛

    } ) ;

  9. مبدل ها(به طور پیش فرض: ("* متن": Window.String، "متن HTML": درست است، "متن JSON": jquery.parsejson، "متن XML": jquery.parsexml))
    نوع: شی
    پارامتر در jQuery-1.5 ظاهر شد، با کمک آنچه توابع به مقادیر از همان نوع تبدیل می شوند، در دیگری.
  10. crossdomain.(به طور پیش فرض: نادرست برای همان دامنه، درست برای crossdomains)
    نوع: ارزش منطقی
    پارامتر در jQuery-1.5 ظاهر شد اگر می خواهید یک پرس و جو متقابل دامنه (به عنوان مثال، JSONP) را در همان دامنه انجام دهید، درست در تنظیم Crossdomain درست کنید. این اجازه می دهد تا، به عنوان مثال، تغییر مسیر سرور به یک دامنه دیگر.
  11. داده ها.
    نوع: شی، رشته یا آرایه.
    داده هایی که به سرور منتقل می شوند. اگر داده ها یک رشته نیستند، آنها به رشته پرس و جو تبدیل می شوند. برای دریافت درخواست ها، داده ها به URL متصل می شوند. شی باید شامل یک جفت کلید / ارزش باشد. اگر مقدار آرایه، پس از آن، ارزش های جی کوئری را بسته به تنظیمات سنتی تعیین می کند. به طور پیش فرض، به عنوان مثال، (foo: ["bar1"، "bar2"]) تبدیل به & foo \u003d bar1 & foo \u003d bar2.
  12. datafilter (داده ها، نوع)
    نوع: تابع
    یک تابع که پیش از پردازش داده های ارسال شده توسط سرور، I.E. این باید نقش فیلتر را بازی کند و رشته تمیز را بازگرداند. دو پارامتر به این تابع منتقل می شود: داده های ذکر شده و مقدار پارامتر نوع داده.. تابع مشخص شده در DataFilter باید داده های پردازش شده را بازگرداند.
  13. نوع داده. (به طور پیش فرض: به صورت خودکار (XML، JSON، SCRIPT یا HTML) تعیین می شود)
    نوع: ردیف
    نوع داده ای که انتظار می رود پاسخ از سرور دریافت کند. اگر مشخص نشده باشد، جی کوئری سعی خواهد کرد آن را به طور خودکار با استفاده از سرور MIME تعیین کند.
  14. خطا
    نوع: تابع
    تابع که در صورت تکمیل ناموفق درخواست به سرور نامیده می شود. این سه پارامتر را فراهم می کند: JQXHRH (تا 1.5 مورد استفاده از XMLHTTPREQUEST)، یک رشته با توضیحات خطایی رخ داده است، و همچنین یک شیء استثنا اگر این اتفاق افتاد. مقادیر احتمالی استدلال دوم: "Timeout"، "ERROR"، "notmodified" و "parserError" (در موارد پیش بینی نشده، مقدار صفر می تواند بازگردانده شود). شروع با جی کوئری-1.5، این پارامتر می تواند هر دو یک تابع و مجموعه ای از توابع را انجام دهد.
    رویداد خطا زمانی رخ نمی دهد که DataType برابر با اسکریپت یا JSONP باشد.
  15. جهانی (به طور پیش فرض: درست است)
    نوع: ارزش منطقی
    مسئول عملیات رویدادهای درخواست آژاکس جهانی (به عنوان مثال، AJAXSTART یا AJAXSTOP). اگر این پارامتر را به حوادث نادرست، جهانی تنظیم کنید این درخواست نامیده می شود
  16. هدر ها
    نوع: شی
    پارامتر در jQuery-1.5 ظاهر شد در اینجا شما می توانید شماره های پرس و جو اضافی را مشخص کنید (هدر). مقادیر این تنظیم قبل از اینکه تابع Beforesend نامیده می شود وارد شود، که در آن تغییرات نهایی را می توان به سرفصلها انجام داد.
  17. ifmodified
    نوع: ارزش منطقی
    هنگامی که این تنظیم را به TRUE انتقال می دهید، پرس و جو با وضعیت "موفقیت آمیز" تکمیل خواهد شد، تنها اگر پاسخ از سرور از پاسخ قبلی متفاوت باشد. جی کوئری این واقعیت را با اشاره به هدر آخرین اصلاح شده بررسی می کند. با شروع JQuery-1.4، علاوه بر آخرین اصلاح شده و "Etag" نیز بررسی می شود (هر دو توسط سرور ارائه می شود و برای اطلاع از مرورگر که داده های درخواست شده از سرور از درخواست قبلی تغییر نمی کند).
  18. اهل جزیره
    نوع: ارزش منطقی
    پارامتر ظاهر شد در jQuery-1.5.1 اجازه می دهد تا شما را به تنظیم وضعیت منبع صفحه محلی (به عنوان اگر آن را از طریق پروتکل فایل اتفاق افتاد)، حتی اگر جی کوئری آن را به رسمیت شناختن آن در غیر این صورت. کتابخانه تصمیم می گیرد که صفحه در مورد پروتکل های زیر به صورت محلی در حال اجرا باشد: فایل، * -extension و ویجت. توصیه شده برای تعیین مقدار پارامتر Islocal در سراسر جهان - با استفاده از عملکرد $ .AJAXSETUP ()، و نه در تنظیمات پرسشنامه AJAX فردی.
  19. jsnp
    نوع: ردیف یا ارزش منطقی.
    نام پارامتر را به URL درخواست JSONP اضافه می کند (به طور پیش فرض، "فراخوانی" استفاده می شود). به عنوان مثال، پیکربندی (JSONP: "onjsonpload") به بخشی از URL رشته "onjsonpload \u003d؟" تبدیل می شود . شروع از نسخه 1.5، مشخصات در این پارامتر کاذب مانع اضافه شدن به URL می شود پارامتر اضافی. در این مورد، شما باید مقدار تنظیم JSONPCallback را تنظیم کنید. به عنوان مثال، این است: (JSONP: FALSE، JSONPCALLBACK: "CALLBACKNAME").
  20. jsonpcallback
    نوع: رشته یا عملکرد
    نام تابع را تعریف می کند که هنگام پاسخ دادن به سرور در درخواست JSONP نامیده می شود. به طور پیش فرض، jQuery یک نام دلخواه این ویژگی را تولید می کند که یک گزینه ترجیح داده شده است که عملیات کتابخانه را ساده تر می کند. یکی از دلایلی که در آن تعیین شده است، تابع پردازش پرس و جو JSONP خود را بهبود می بخشد، بهبود ذخیره درخواست های دریافتی است.
    با شروع از جی کوئری-1.5، می توانید یک تابع را در این پارامتر مشخص کنید تا بتوانید به خودتان پاسخ دهید. در این مورد، عملکرد مشخص شده باید داده های دریافت شده از سرور را بازگرداند (در عملکرد مشخص شده آنها در پارامتر اول موجود خواهد بود).
  21. روش (به طور پیش فرض: "دریافت")
    نوع: ردیف
    پارامتر ظاهر شد در jQuery-1.9.0 به شما اجازه می دهد تا نوع درخواست را به سرور ("ارسال"، "دریافت"، "put") مشخص کنید
  22. mimetype
    نوع: ردیف
    پارامتر در jQuery-1.5.1 ظاهر شد. در این زمینه، می توانید نوع داده هایی را که در آن پاسخ از سرور به جای XHR انتظار می رود، مشخص کنید
  23. کلمه عبور.
    نوع: ردیف
    رمز عبور برای احراز هویت در سرور، در صورت لزوم.
  24. processData (پیش فرض درست)
    نوع: ارزش منطقی
    به طور پیشفرض، داده های ارسال شده به سرور از یک شی در رشته پرس و جو تبدیل می شود (فرمت URL: fname1 \u003d value1 & fname2 \u003d value2 & ...) و به عنوان "برنامه / x-www-form-urlencoded" ارسال می شود. اگر شما نیاز به ارسال یک سند DOM یا سایر اطلاعاتی دارید که نمیتوانید گزینه ProcessData را در اشتباه تنظیم کنید.
  25. scriptcharset
    نوع: ردیف
    فقط برای پرس و جو AJAX درخواست می شود، DataType می تواند یا "JSONP" یا "اسکریپت" باشد. اگر سرور در یک دامنه شخص ثالث از کدگذاری غیر از شما استفاده کند، باید رمزگذاری یک سرور شخص ثالث را مشخص کنید.
  26. وضعیت وضعیت
    نوع: شی
    پارامتر در jQuery-1.5.0 مجموعه ای از بخار ظاهر شد، که در آن کدهای پرس و جو با توابع که ایجاد می شود مقایسه می شود. به عنوان مثال، برای کد 404 (وجود ندارد)، می توانید یک پیام را به صفحه بفرستید:

    $ .AJAX (وضعیت کد: (404: تابع () (هشدار (صفحه ("صفحه یافت نشد")؛))))))))))

    $ آژاکس ((

    وضعیت وضعیت: (

    404: تابع () (

    هشدار ("صفحه یافت نشد")؛

    } ) ;


    اگر درخواست با موفقیت انجام شد، سپس به عنوان یک پارامتر، تابع ناشناس این پارامترهای مشابه را انجام می دهد که توابع اجرای موفقیت آمیز پرس و جو (مشخص شده در پارامتر موفقیت) و در صورت خطا همانند توابع خطا است.
  27. موفقیت (داده، texttatus، jqxhr)
    نوع: تابع، آرایه.
    تابع که در صورت تکمیل موفقیت آمیز درخواست سرور نامیده می شود. طول می کشد 3 استدلال:
    • داده ها (داده ها) ارسال شده توسط سرور و پیش پردازش؛
    • رشته با وضعیت اجرای (texttatus)؛
    • یک Object JQXHR (در نسخه های تا 1.5 به جای JQXHR از XMLHTTPREQUEST استفاده می کند). از جی کوئری 1.5، به جای یک تابع واحد، این پارامتر می تواند مجموعه ای از توابع را بگیرد.
  28. زمان وقوع
    نوع: شماره
    زمان منتظر پاسخ از سرور در میلی ثانیه است. بازنویسی تنظیم جهانی پارامتر مشابه در $ .ajaxsetup (). اگر این بار بیش از حد باشد، درخواست با یک خطا تکمیل می شود و رویداد خطا رخ خواهد داد، که وضعیت "Timeout" را داشته باشد.
    زمان شمارش از لحظه تماس با عملکرد $ .ajax است. ممکن است اتفاق بیفتد که در این لحظه چندین درخواست دیگر راه اندازی خواهد شد و مرورگر اجرای درخواست فعلی را به تعویق می اندازد. در این مورد، زمان وقفه را می توان تکمیل کرد، هرچند در واقع، درخواست حتی راه اندازی نشد.
    در jQuery-1.4 و جوانتر، در پایان زمان انتظار، شی XMLHttpRequest به حالت خطا تغییر می کند و دسترسی به فیلدهای آن می تواند باعث ایجاد یک استثنا شود. در فایرفاکس 3.0+، اسکریپت و پرس و جو JSONP زمانی که زمان انتظار بیش از حد است، قطع نخواهد شد. آنها حتی پس از این زمان منقضی خواهند شد.
  29. سنتی
    نوع: ارزش منطقی
    مقدار این پارامتر را به درست تنظیم کنید تا از پارامترهای تبدیل سنتی (سریال سازی) استفاده کنید.
  30. نوع(به طور پیش فرض: "دریافت")
    نوع: ردیف
    روش پارامتر آنالوگ. پارامتر در jQuery زیر 1.9.0 استفاده می شود
  31. url (به طور پیش فرض: آدرس صفحه فعلی)
    نوع: ردیف
    آدرس را که درخواست ارسال می شود، تعریف می کند.
  32. نام کاربری.
    نوع: ردیف
    نام کاربری برای احراز هویت در سرور، در صورت لزوم.
  33. xhr(به طور پیش فرض: ActiveXObject در IE، XMLHttpRequest در مرورگرهای دیگر)
    نوع: تابع
    یک تابع که یک شی XMLHttpRequest را ارائه می دهد. به طور پیش فرض، مرورگرهای اینترنت اکسپلورر این شیء فعال است، و در موارد دیگر XMLHTTPREQuest است. با این پارامتر، شما می توانید نسخه خود را از این شی را اجرا کنید.
  34. xhrfields.
    نوع: شی
    پارامتر در jQuery-1.5.1 مجموعه ای از جفت ها (نام: علامت) به منظور تغییر / اضافه کردن مقادیر زمینه های مربوطه objectxmlhttprequest ظاهر شد. به عنوان مثال، شما می توانید اموال خود را در حقیقت تنظیم کنید، هنگام انجام یک پرس و جو Crossdomain:

    $ .AJAX (URL: A_CROSS_DOMAIN_URL، XHRIELDS: (با Credentials: TRUE))؛

    $ آژاکس ((

    uRL: a_cross_domain_url،

    xhrfields: (

    با احترام: درست است.

    } ) ;

همانطور که در بالا ذکر شد، $ .ajax () اصلی ترین روش، و تمام روش های بعدی تنها بسته بندی آن است. خیلی بخش نیازی به تماس با این تابع نیست، زیرا گزینه های بالاتر از سطوح بالاتر وجود دارد، مانند، و. آنها در درک و استفاده آسان تر هستند، هرچند $ .ajax () یک راه حل انعطاف پذیر تر است.

ساده ترین راه استفاده خواهد شد $ .ajax () تماس بدون مشخص کردن پارامترها:

$ آژاکس ()؛

دستگیره های رویداد

Beforesend، خطا، تنظیمات datafilter، موفقیت و کامل به شما اجازه می دهد تا نصب کننده های رویداد را که در زمان های خاصی از هر پرس و جو AJAX رخ می دهد نصب کنید.

  • beforesendبلافاصله قبل از ارسال یک درخواست به سرور رخ می دهد؛
  • خطا در صورت اجرای ناموفق پرس و جو رخ می دهد؛
  • datafilter در زمان ورود اطلاعات از سرور اتفاق می افتد. به شما اجازه می دهد اطلاعات "RAW" ارسال شده توسط سرور را مدیریت کنید.
  • موفقیت در صورت تکمیل موفقیت آمیز درخواست رخ می دهد؛
  • کامل.در صورت هرگونه اتمام درخواست اتفاق می افتد.
  • موفقیت: عملکرد () (

    هشدار ( "داده ها با موفقیت ارسال شده است.") ;

    } ) ;

    توجه! تنظیمات مورد بحث در بالا .success ()، .error () و-.pelate () به jQuery-1.5 اضافه شد، علاوه بر روش استاندارد معکوس معکوس ()، .fail () i.then ()، با با این حال، می توانید دستگیره ها را نصب کنید، با شروع از جی کوئری-1.8 این سه روش برای استفاده نامطلوب خواهد بود.

    نوع داده

    تابع $ .ajax () در مورد نوع سرور داده ارسال شده از سرور خود (ابزار MIME) پیدا خواهد کرد. علاوه بر این، ممکن است شخصا مشخص کنید (روشن کردن) نحوه تفسیر این داده ها. این کار با استفاده از پارامتر انجام می شود. نوع داده.. مقادیر احتمالی این پارامتر:

    • "XML" - سند XML نتیجه در فرم متن موجود خواهد بود. شما می توانید با او کار کنید معنی استاندارد جی کوئری (و همچنین با سند HTML).
    • "HTML" - HTML دریافت شده در فرم متن موجود خواهد بود. اگر شامل اسکریپت ها در برچسب ها باشد
      تعداد چیزی در سرور site2.ru -

      پی اچ پی

      در حال حاضر ما باید یک شی JSON با داده ها، در PHP ایجاد کنیم. فرض کنید که یک متر مشخص در سرور Site2.ru ذخیره می شود، ما از سایت 1.ru درخواست خواهیم کرد و فقط یک عدد (تعداد چیزی) را دریافت خواهیم کرد. لطفا توجه داشته باشید که ما باید به جای Object JSON معمولی، یک شی JSONP ایجاد کنیم.

      // ایجاد یک آرایه با داده هایی که ما می خواهیم JSON را با پاسخ $ data \u003d Array ارسال کنیم ("counter" \u003d\u003e 5،)؛ // ترجمه جرم در JSON $ json_data \u003d json_encode ($ داده)؛ // تنظیم هدر نوع رمزگذاری و محتوا ("نوع محتوا: برنامه / json؛ charset \u003d utf-8")؛ // JSONP - JSONP ECHO $ \u200b\u200b_GET OBJECT ["callback"]. "(" $ json_data. ")؛"؛

      فایل را به عنوان counter.php ذخیره کنید و آن را در سرور Site2.ru پر کنید

      جاوا اسکریپت

      در حال حاضر شما نیاز به تماس با $ .ajax در jQuery به عنوان شرح زیر شرح داده شده است:

      $ (سند) .ready (function () ($ .ajax ((نوع: "GET"، URL: "http://site2.ru/counter.php؟callback\u003d؟"، DataType: "JSONP"، موفقیت: تابع (داده ها) ($ (". text .counter"). HTML (data.counter)؛))؛))

      اگر عملکرد فراخوانی را مشخص نکنید و به سادگی تماس بگیرید callback \u003d؟ - نام تابع جی کوئری به طور خودکار جایگزین شده است، اما شما همچنین می توانید به صراحت نام تابع را مشخص کنید، مانند Callback \u003d Parsefunction.

      در حال حاضر فایل HTML را در Site1.ru اجرا کنید. شما باید یک پاسخ از سرور با داده های JSON دریافت کنید. شما همچنین می توانید از این AJAX مرورگر متقاطع برای $ .getjson، $ .ajax، $ .post و $ .get استفاده کنید.

      P.S. فراموش نکنید که Site2.ru را جایگزین کنید - به نام سرور راه دور خود که درخواست شما را انجام می دهید.

      اگر سوالی دارید یا اضافه کنید، در نظرات زیر بنویسید.