Odeslání požadavku ajax do jiné domény. Požadavky ajax napříč doménami a co s tím má společného php Ajax na jiný server

💖 Líbí se vám? Sdílejte odkaz se svými přáteli
tětiva DOSTAT

HTTP metoda pro přenos dat při provádění požadavku. Obvykle se používá GET nebo POST. Můžete také použít metody PUT a DELETE, ale to se nedoporučuje, protože je nepodporují všechny prohlížeče.

$.ajax(( //... typ: "POST", //... ));

url tětiva aktuální stránku

$.ajax(( //... url: "/cesta/ke/skriptu", //... ));

data řetězec | objekt

Data odeslaná s požadavkem na server. Jsou převedeny na řetězec dotazu a ve výchozím nastavení jsou nutně kódovány ve formě podobné URL (parametr je zodpovědný za automatické kódování do formátu URL).

Řetězec se připojí k řetězci dotazu URL, pokud je požadavek proveden pomocí metody GET. Pokud je požadavek proveden metodou POST, pak jsou data přenesena v těle požadavku.

$.ajax(( //... data: "hodnota1=1&hodnota2=2&hodnota3=3", //... ));

Pokud je daný parametr objekt jako sada párů název_vlastnosti/hodnota a hodnota je pole, pak jQuery serializuje objekt do sekvence více hodnot se stejným klíčem.

(Foo: ["bar1", "bar2"])

&Foo=bar1&Foo=bar2

asynchronní booleovský skutečný

Příznak pro provádění asynchronních požadavků.

$.ajax(( //... async: false, //... ));

datový typ tětiva Řetězec určující název datového typu očekávaného v odpovědi serveru. Pokud není datový typ specifikován, jQuery se jej sám pokusí určit na základě MIME typu odpovědi serveru. Platné hodnoty: xml, html, script, json, jsonp, text. (To je nezbytné pro definování metody pro zpracování dat přijatých v odpovědi na požadavek funkcí dataFilter předtím, než jsou předána funkci zpětného volání úspěchu.) mezipaměti booleovský skutečný

Příznak ukládání odpovědi do mezipaměti.

Výchozí hodnota je true pro datové typy text, xml, html, json. Pro datové typy script a jsonp je výchozí hodnota false .

typ obsahu tětiva application/x-www-form-urlencoded Typ obsahu v požadavku (při odesílání dat na server). kontext objekt Tento objekt se stane kontextem (toto) pro všechny funkce zpětného volání spojené s tímto požadavkem ajax (například pro funkce úspěchu nebo chyby) $.ajax(( url: "test.html", kontext: document.body, success: function ()( $(this).addClass("hotovo"); ) )); globální booleovský skutečný Volání obslužných programů globálních událostí v různých fázích požadavku ajax, například funkce ajaxStart nebo ajaxStop ifModified booleovský Nepravdivé

Je-li nastaveno na true , je požadavek považován za úspěšný pouze v případě, že se data v odpovědi od posledního požadavku změnila (jQuery určuje, zda komponenta v mezipaměti prohlížeče odpovídá tomu, co je na serveru, kontrolou hlavičky Last-Modified s datem poslední úpravy obsahu a v jQuery 1.4 se kontroluje i hlavička Etag - řetězec s verzí komponenty). Výchozí hodnota je false , tj. Úspěch požadavku nezávisí na hlavičkách nebo změnách v odpovědi.

uživatelské jméno tětiva

Uživatelské jméno, které bude použito pro HTTP autorizaci na serveru.

Heslo tětiva Heslo, které bude použito jako odpověď na požadavek HTTP autorizace na serveru. zpracovat data booleovský skutečný

Data předaná serveru v parametru jsou převedena na řetězec dotazu s typem obsahu Application/X-WWW-forms-urlencoded a zakódován. Pokud toto zpracování není žádoucí (když je třeba odeslat na server jiná data, jako je objekt DOMDocument nebo xml), lze jej obejít nastavením tohoto parametru na hodnotu false .

scriptCharset tětiva

Při provádění požadavků GET a požadavků cílených na data jsonp nebo skriptu určuje kódování znaků požadavku (například UTF-8 nebo CP1251). Užitečné pro rozdíly mezi kódováním na straně klienta a na straně serveru.

Časový limit celé číslo

Nastavuje maximální dobu čekání na odpověď serveru v milisekundách. Má přednost před nastavením globálního časového limitu pomocí $.AjaxSetup . Pokud je překročen časový limit, požadavek se přeruší a zavolá se chyba funkce zpracování chyb (je-li nainstalována).

Název Parametry Popis
chyba XHR, textStatus, errorThrown

Spustí se, když požadavek selže. Funkci jsou předány tři argumenty:

textStatus – řetězec popisující typ chyby, která se vyskytla (timeout, error, notmodified nebo parsererror)

errorThrown - volitelný parametr, objekt výjimky, pokud existuje (vrácený instancí objektu XHR)

$.ajax(( //... chyba: function() ( alert("Chyba!"); //... ));

úspěch data, textStatus, XHR

Spustí se, když je požadavek úspěšný. Funkci jsou předány tři argumenty:

data - data vrácená serverem v odpovědi, předzpracovaná funkcí dataFilter v souladu s hodnotou parametru

textStatus - řetězec se stavovým kódem označujícím úspěch

XHR – instance objektu XMLHttpRequest

$.ajax(( //... úspěch: funkce() ( alert("Úspěch!"), //... ));

před Odeslat XHR

Spustí se před odesláním požadavku. Jako jediný argument je předána instance objektu XHR (XMLHttpRequest). Pokud funkce vrátí false , pak je požadavek zrušen.

$.ajax(( //... beforeSend: function() ( alert("BeforeSend fungoval!"); //... ));

kompletní XHR, textStatus

Spustí se na konci požadavku, bez ohledu na jeho úspěch nebo neúspěch (a také po funkcích a, pokud jsou specifikovány). Funkce přijímá dva argumenty: instanci objektu XHR (XMLHttpRequest) a řetězec označující stav úspěchu nebo chyby (podle stavového kódu v odpovědi na požadavek)


Podrobný příklad:

function testAjax(id, pid) ( $.ajax(( typ: "POST", data: "id=" + id + "&pid=" + pid, url: "/cesta/ke/skriptu/test.php", success: function(data) ( var obj = $.parseJSON(data); //Převést json odpovědi serveru if (obj.error == 0) ( alert("Požadavek byl úspěšný"); ) else ( alert (obj.error ) ) ));
Žádost s chybou

PHP skript (test.php):

Další příklad s jiným výstupem odezvy:

function testAjax(id, pid) ( $.ajax(( typ: "POST", data: "id=" + id + "&pid=" + pid, url: "/cesta/ke/skriptu/test.php", úspěch: funkce(data) ( $("#obsah").html(data; ) ));
Žádost s chybou

Odpovědět:

PHP skript (test.php):


Více informací naleznete na: http://api.jquery.com/jquery.ajax/

24.04.2015 3 11696

Požadavek ajax napříč doménami zahrnuje příjem dat z webu site2.ru pro web site1.ru. Běžné požadavky ajaxu nebudou fungovat kvůli bezpečnostní politice, ale v jQuery, počínaje verzí 1.5, bylo možné posílat požadavky ajax mezi doménami a přijímat odpověď v JSON.

Při použití JSON můžeme přistupovat k jakékoli doméně, ale výsledek se dostaví v podobě JSON odpovědi a my ji nebudeme moci zpracovat. JSONP navrhuje předat název funkce serveru a přijímat nikoli holá data, ale data zabalená do stejné funkce. Například při odesílání požadavku na adresu http://site2.ru/data.json?callback=parseFunction odešleme název funkce zpětného volání - parseFunction a obdržíme určitou odpověď parseFunction(("result": 2, "error ": false)), načež jQuery zavolá parseFunction k analýze výsledku.

Podívejme se na to vše podrobně na příkladu, uděláme požadavek, který odešleme z webu site1.ru na web2.ru a obdržíme určitou odpověď v json.

HTML

Vytvoříme jednoduchou stránku a propojíme knihovnu jQuery:

Otevřete vývojářské nástroje ve svém prohlížeči právě teď a na kartě konzoly spusťte tento požadavek.

Uvidíte něco takového

Vše v pořádku, odeslali jsme poptávku a obdrželi odpověď. Zdálo by se, co by mohlo být jednodušší? Nyní přejděte na jakýkoli jiný web, kde je povolen jQuery, a zkuste udělat totéž. Jen ne na webu https, na konci článku se dozvíte proč.

Kontroloval jsem například žádosti na fotbalovém webu bombardir.ru. A zároveň jsem byl ohromen tím, jaké svinstvo se do konzole nevejde ani na tak docela známých stránkách. To však není to, o čem mluvíme.

Proveďte požadavek z jiné domény a v konzoli uvidíte ne tak blažený obrázek. Říká, že to nejde načíst, nejsou tam žádná data a je to obecně smutné.

Pokud otevřete záložku Network a najdete tam odpovídající požadavek, uvidíte, že nám server dokonce vrátil 200 OK
Ale obsah souboru chybí. V čem je háček?

Co se pokazilo a jaké bude řešení

Háček je v tom, že zásady internetu neumožňují prohlížečům stahovat data z jakéhokoli zdroje. Kromě případů, kdy tyto zdroje samy mají zájem o distribuci konkrétních dat.
To je náš případ. Chcete-li udělit oprávnění k použití souboru html odkudkoli, při vyžádání tohoto souboru musíte odeslat záhlaví http Access-Control-Allow-Origin: *

Teď je otázka, jak to udělat. Pokud vy (nebo administrátoři) máte přístup k nginx, pak by jedním ze způsobů bylo nakonfigurovat předávání této hlavičky pomocí webového serveru. Přejdete k administrátorům s odpovídajícím požadavkem nebo vygooglujete potřebné konfigurace pro váš webový server.

Pokud tento přístup není k dispozici, jako například téměř každý poskytovatel hostingu má levný tarif, musíte se dostat ven sami. A tady přichází na pomoc php. Myšlenka je vložit náš html do souboru php, který vloží hlavičku a vrátí požadovaný obsah.

Dopadne to takto, vytvořte soubor template.php a do prvního řádku napište příkaz php

Header("Access-Control-Allow-Origin: *");

Obsah z template.php

To znamená, že obsah template.php bude takový, nezapomeňte na PHP otázky a závorky

Soubor byl vytvořen na webdevkin a je umístěn (otevře se na nové kartě). Zkusme si to nyní vyžádat z jiné domény a uvidíme, co se stane

$..php", function(response) (console.log(response)));

Jak vidíte, vše funguje dobře - soubor je načten!

Podívejme se na kartu Síť.
Vezměte prosím na vědomí, že záhlaví Access-Control-Allow-Origin, které nás zajímá, se objevilo v bloku Záhlaví odpovědi: *

Obecně je článek hotový. Zbývá jen posbírat mé myšlenky a přidat trochu více informací.

Shrnutí a shrnutí
  • 1. S Ajaxem nemůžete jen tak požadovat jakýkoli zdroj z jiné domény
  • 2. Odešlete hlavičku Access-Control-Allow-Origin pro všechny zdroje, ke kterým je potřeba přistupovat odkudkoli
  • 3. Udělejte to pomocí webového serveru nebo php
  • 4. V php je tato hlavička odeslána s hlavičkou příkazu("Access-Control-Allow-Origin: *")
  • 5. Access-Control-Allow-Origin: * - povolit přístup ke všem doménám, Access-Control-Allow-Origin: site.ru - pouze doména site.ru
  • 6. Access-Control-Allow-Origin se odešle na úplný začátek souboru php, ještě před výstupem jiných dat (stejně jako jakékoli jiné hlavičky http)
  • 7. „Zdroj“ není pouze soubor se značkami html, ale také jakákoli adresa URL, na kterou jde požadavek ajax, například příjem dat json nebo požadavek na přidání řádku do databázové tabulky

A poslední věc, vyndal jsem to zvlášť. Ne nadarmo jsem požádal o provedení požadavků ze stránky http. S https nebude možné načíst data z http z jiného důvodu - smíšený obsah. Ale web je stále webem http (aktualizováno: již není k dispozici, web byl přesunut na https)

To je to, co uvidíte v konzole, pokud se pokusíte provést stejný požadavek z libovolného webu https. Pokud se tedy chystáte dělat embedded widgety nebo něco podobného, ​​určitě si musíte na svůj web nainstalovat SSL certifikát.

Syntaxe a popis:

Návratová hodnota: Instance objektu XHR (XMLHttpRequest).

Možnosti:

    options – (object) Objekt ve formě sady vlastností (klíč: páry „hodnota“), které určují parametry pro požadavek Ajax. Možných parametrů (vlastností objektu options) je spousta a většinou se ve většině případů nevyužijí všechny, ale jen některé. Všechny tyto parametry jsou navíc volitelné, protože hodnotu kterékoli z nich lze nastavit na výchozí pomocí metody $.ajaxSetup().

    Ke konfiguraci požadavku Ajax jsou k dispozici následující vlastnosti objektu options:

    • async – (boolean - logická hodnota) Výchozí hodnota je true a poté jsou všechny požadavky prováděny asynchronně (proto se používá Ajax, takže operace jsou prováděny paralelně). Pokud nastavíte hodnotu na false, což je vysoce nežádoucí, požadavek bude proveden jako synchronní (Během provádění synchronního požadavku mohou být zablokovány jiné akce prohlížeče. A obecně může prohlížeč přestat reagovat).

      beforeSend(XHR) – (funkce) Funkce volaná před odesláním požadavku. Slouží k nastavení dalších (vlastních) hlaviček nebo k provádění jiných předběžných operací. Jako jediný argument je předána instance objektu XHR (XMLHttpRequest). Pokud funkce vrátí hodnotu false, požadavek je zrušen.

      cache – (boolean – logická hodnota) Pokud je false, pak požadované stránky prohlížeč neukládá do mezipaměti. (Prohlížeč může poskytovat výsledky z mezipaměti. Pokud jsou například data v odpovědi serveru na požadavek Ajaxu vždy nová, ukládání do mezipaměti interferuje). Ve výchozím nastavení to platí pro datové typy text, xml, html, json. Pro datové typy "script" a "jsonp" je výchozí hodnota false.

      complete(XHR, textStatus ) – (funkce) Funkce volaná na konci požadavku, bez ohledu na jeho úspěch nebo neúspěch (a po funkcích úspěchu a chyby, pokud jsou specifikovány). Funkce přebírá dva argumenty: instanci objektu XHR (XMLHttpRequest) a řetězec označující stav „úspěch“ nebo „chyba“ (podle stavového kódu v odpovědi na požadavek).

      contentType – (řetězec) Typ obsahu v požadavku (při odesílání dat na server). Výchozí hodnota je "application/x-www-form-urlencoded" (vhodné pro většinu případů a je také výchozí při odesílání formulářů).

      kontext – (objekt) Tento objekt se stane kontextem (toto) pro všechny funkce zpětného volání spojené s tímto požadavkem Ajax (například pro funkce úspěchu nebo chyby).

      $.ajax(( url: "test.html",
      kontext: document.body,
      úspěch: funkce())(
      $(this).addClass("hotovo");
      }});

      data – (řetězec | objekt) Data odeslaná s požadavkem na server. Jsou převedeny na řetězec dotazu a standardně zakódovány do podoby podobné URL (parametr processData je zodpovědný za automatické kódování do formátu URL).

      Řetězec se připojí k řetězci dotazu URL, pokud je požadavek proveden pomocí metody GET. Pokud je požadavek proveden metodou POST, pak jsou data přenesena v těle požadavku.

      Pokud je daný parametr objekt jako sada párů název_vlastnosti/hodnota a hodnota je pole, pak jQuery serializuje objekt do sekvence více hodnot se stejným klíčem.

      Například, (Foo: ["bar1", "bar2"]) bude "&Foo=bar1&Foo=bar2" .

      dataFilter(data, type) – (funkce) Funkce, která je volána v případě úspěšného požadavku a slouží ke zpracování dat přijatých v odpovědi serveru na požadavek. Vrátí data zpracovaná podle parametru "dataType" a předá je funkci success. Data typu text a xml jsou předávána bez okamžitého zpracování funkci úspěchu prostřednictvím vlastnosti responseText nebo responseHTML objektu XMLHttpRequest. Funkce dataFilter má dva argumenty:

    • data - přijatá data (tělo odpovědi serveru),
    • typ - typ těchto dat (parametr "dataType").
    • dataType – (řetězec) Řetězec definující název datového typu očekávaného v odpovědi serveru. Pokud není datový typ specifikován, jQuery se jej sám pokusí určit na základě MIME typu odpovědi serveru. Platné hodnoty: "xml", "html", "script", "json", "jsonp", "text". (To je nezbytné pro definování metody pro zpracování dat přijatých v odpovědi na požadavek funkcí dataFilter předtím, než jsou předána funkci zpětného volání úspěchu.)

      error(XHR, textStatus, errorThrown) – (funkce) Funkce, která je volána, když požadavek selže (pokud stavový kód v odpovědi serveru indikuje chybu). Funkci jsou předány tři argumenty:

    • XHR – instance objektu XMLHttpRequest,
    • textStatus - řetězec popisující typ chyby, která se vyskytla ("timeout", "error", "notmodified" nebo "parsererror"),
    • errorThrown - volitelný parametr - objekt výjimky, pokud existuje (vrácený instancí objektu XHR).
    • global – (boolean – logická hodnota) Výchozí hodnota je true (umožňuje volání globálních obslužných rutin událostí v různých fázích požadavku Ajax, například funkce ajaxStart nebo ajaxStop). Hodnota je nastavena na false, aby se zabránilo jejich spuštění. (Slouží ke správě událostí Ajaxu).

      ifModified – (boolean - booleovská hodnota) Pokud je nastaveno na hodnotu true, pak je požadavek považován za úspěšný pouze v případě, že se data v odpovědi od posledního požadavku změnila (jQuery určuje, zda komponenta v mezipaměti prohlížeče odpovídá tomu, co je na serveru kontrolou hlavička "Last-Modified" s datem poslední úpravy obsahu a v jQuery 1.4 je zaškrtnutá i hlavička "Etag" - řetězec s verzí komponenty). Výchozí hodnota je false, tzn. Úspěch požadavku nezávisí na hlavičkách nebo změnách v odpovědi.

      jsonp – (řetězec) Přepíše název funkce zpětného volání pro požadavek jsonp mezi doménami. Nahradí klíčové slovo zpětného volání v části "zpětné volání=?" řetězec požadavku GET (připojený k adrese URL) nebo odeslaný v těle požadavku při odeslání pomocí metody POST. Ve výchozím nastavení jQuery automaticky generuje jedinečný název pro funkci zpětného volání.

      jsonpCallback – (řetězec) Definuje název funkce zpětného volání pro požadavek jsonp. Tato hodnota bude použita místo náhodného názvu automaticky generovaného knihovnou jQuery. Použití tohoto parametru vám umožní vyhnout se ukládání požadavků GET do mezipaměti prohlížeče. Je vhodné povolit jQuery generovat nový název pro každý nový mezidoménový požadavek na server pro usnadnění správy požadavků a odpovědí.

      password – (řetězec) Heslo, které bude použito jako odpověď na požadavek HTTP autentizace na serveru.

      processData – (boolean) Výchozí hodnota je true a data předaná serveru v parametru data jsou převedena na řetězec dotazu s typem obsahu "Application/X-WWW-forms-urlencoded" a zakódována. Pokud toto zpracování není žádoucí (když je třeba odeslat na server jiná data, jako je objekt DOMDocument nebo xml), lze jej obejít nastavením tohoto parametru na hodnotu false.

      scriptCharset – (řetězec) Při provádění požadavků GET a požadavků cílených na data „jsonp“ nebo „script“ určuje kódování znaku požadavku (například „UTF-8“ nebo „CP1251“). Užitečné pro rozdíly mezi kódováním na straně klienta a na straně serveru.

      success(data, textStatus, XHR ) – (funkce) Funkce, která je volána při úspěšném požadavku (pokud stavový kód v odpovědi na požadavek indikuje úspěch). Funkci jsou předány tři argumenty:

    • data - data vrácená serverem v odpovědi, předzpracovaná funkcí dataFilter v souladu s hodnotou parametru dataType,
    • textStatus - řetězec se stavovým kódem označujícím úspěch,
    • XHR je instancí objektu XMLHttpRequest.
    • timeout – (číslo) Nastavuje maximální dobu čekání na odpověď serveru v milisekundách. Má přednost před nastavením globálního časového limitu pomocí $.AjaxSetup. Pokud je překročen časový limit, požadavek se přeruší a zavolá se chyba funkce zpracování chyb (je-li nainstalována). Toho lze využít například k přiřazení konkrétního požadavku delšího časového limitu, než je časový limit nastavený pro všechny požadavky.

      tradiční – (boolean) Musí být nastaveno na hodnotu true, aby se při odesílání používala tradiční (zjednodušená) serializace dat (bez rekurzivní konverze na řetězec objektů nebo polí podobných URL, které jsou vnořeny do jiných polí nebo objektů).

      typ – (řetězec) HTTP metoda pro přenos dat při provádění požadavku. Ve výchozím nastavení jsou data přenášena pomocí metody GET. Obvykle se používá GET nebo POST. Můžete také použít metody PUT a DELETE, ale to se nedoporučuje, protože je nepodporují všechny prohlížeče.

      url – (řetězec) Řetězec obsahující adresu URL, na kterou je odeslán požadavek. Ve výchozím nastavení se jedná o aktuální stránku.

      username – (řetězec) Uživatelské jméno, které bude použito pro HTTP autorizaci na serveru.

      xhr – (funkce) Funkce volaná k vytvoření instance objektu XMLHttpRequest. Ve výchozím nastavení je vytvoření objektu XHR implementováno prostřednictvím ActiveXObject v prohlížeči IE nebo prostřednictvím vestavěného objektu typu XMLHttpRequest v ostatních případech.

  • // Provedení asynchronního požadavku Ajax pomocí metody POST. // Odešle data na server a v případě úspěchu zobrazí // odpověď serveru v dialogovém okně. $.ajax(( typ: "POST", url: "test.php", data: "jméno=Jan&umístění=Boston", success: function(msg)( alert("Data Saved: " + msg); ) )) ;



  • jQuery.ajax() – odešle požadavek na server bez opětovného načtení stránky. Jedná se o nízkoúrovňovou metodu se spoustou nastavení. Je základem fungování všech ajaxů, což je často snazší pochopit a používat, ale stále poskytuje omezenou funkčnost ve srovnání s touto metodou.

    $.ajax() vrací objekt XMLHttpRequest. Ve většině případů nebudete muset pracovat přímo s tímto objektem, ale je stále k dispozici pro případ, že byste potřebovali požadavek zrušit ručně.

    Funkci $.ajax() je předán objekt sestávající z párů klíč/hodnota, které se používají k inicializaci a správě požadavku.

    Požadavek Ajax má dvě použití:

    jQuery.ajax(url [, nastavení ])

    Jediný rozdíl oproti předchozí verzi metody spočívá v tom, že vlastnost url je zde součástí nastavení, nikoli samostatným parametrem.

    Seznam nastavení
  • přijímá (výchozí: závisí na DataType)
    Typ: objekt.
    Když je učiněn požadavek, záhlaví označují povolené typy obsahu očekávané od serveru. Hodnoty těchto typů budou převzaty z parametru accept. Například následující příklad uvádí platné vlastní typy:

    $.ajax(( přijímá: ( mycustomtype: "application/x-some-custom-type" ), převodníky: ( "text mycustomtype": function(result) ( return newresult; ) ), dataType: "mycustomtype" ));

    $. ajax ((

    přijímá: (

    mycustomtype : "application/x-some-custom-type"

    převodníky: (

    "text mycustomtype" : funkce (výsledek) (

    vrátit nový výsledek ;

    dataType: "mycustomtype"

    } ) ;

  • asynchronní (výchozí: true)
    Typ: boolean.
    Ve výchozím nastavení jsou všechny požadavky odesílány asynchronně (to znamená, že po odeslání požadavku na server stránka nepřestane fungovat při čekání na odpověď). Pokud potřebujete odesílat požadavky synchronně, nastavte tuto možnost na false. Požadavky mezi doménami a jsonp nelze provádět synchronně. Vezměte prosím na vědomí, že synchronní požadavky mohou blokovat prohlížeč, když je požadavek spuštěn.
  • beforeSend(jqXHR, nastavení)
    Typ: funkce.
    Obsahuje funkci, která bude volána bezprostředně před odesláním požadavku ajax na server. Tato funkce může být užitečná pro úpravu objektu jqXHR (v dřívějších verzích knihovny (až 1.5) se místo jqXHR používá XMLHttpRequest). Můžete například změnit/upřesnit potřebná záhlaví atd. Objekt jqXHR bude předán funkci jako první argument. Druhým argumentem je nastavení požadavku.
    beforeSend odkazuje na události ajax. Pokud tedy funkce v něm uvedená vrátí hodnotu false, požadavek ajax bude zrušen, počínaje jQuery-1.5, před voláním bez ohledu na typ požadavku.
  • mezipaměť (výchozí: true, false pro dataType "script" a "jsonp")
    Typ: boolean.
    pokud chcete, aby prohlížeč neukládal do mezipaměti prováděný požadavek, nastavte tento parametr na false. Upozorňujeme, že pokud je parametr nastaven na hodnotu false, bude k adrese URL přidán řádek „_=“.
  • kompletní(jqXHR, textStatus)
    Typ: funkce.
    Funkce, která se provede pokaždé, když se dokončí požadavek AJAX (po dokončení úspěchu a chyby). Funkce jsou předány dva parametry: jqXHR (v dřívějších verzích knihovny (až 1.5), XMLHttpRequest se používá místo jqXHR) a stav provádění požadavku (hodnota řetězce: "úspěch", "nezměněno", "chyba", "timeout", "abort" nebo "parsererror").
    Počínaje jQuery-1.5 můžete předat kompletnímu parametru řadu funkcí, nikoli pouze jednu funkci. Všechny funkce budou volány v pořadí, ve kterém jsou uvedeny v tomto poli.
  • obsah
    Typ: objekt.
    Parametr se objevil v jQuery-1.5 Je specifikován objektem ve formátu (string:regular expression) a určuje, jak bude jQuery analyzovat odpověď ze serveru v závislosti na jejím typu.
  • typ obsahu
    Typ: boolean nebo řetězec.
    Při odesílání požadavku na server jsou data přenášena ve formátu určeném v contentType. Výchozí hodnota je ‘application/x-www-form-urlencoded; charset=UTF-8’, což je ve většině případů vhodné. Pokud tento parametr zadáte explicitně, bude odeslán na server (i když tam nebyla odeslána žádná data).
    S jQuery-1.6 můžete předat false, abyste nenastavili název.
  • kontext
    Typ: objekt.
    Objekt, který se stane kontextem po dokončení požadavku (hodnota předaná do proměnné this). Pokud například zadáte prvek DOM jako kontext, všechny obslužné rutiny požadavků ajax budou také spuštěny v kontextu tohoto prvku DOM. V tomto příkladu bude klíčové slovo this obsahovat document.body:

    $.ajax(( url: "test.html", kontext: document.body )).done(function() ( $(this).addClass("hotovo"); ));

    $. ajax ((

    url: "test.html" ,

    kontext: dokument. tělo

    )). hotovo(funkce()(

    $(toto). addClass("hotovo");

    } ) ;

  • převodníky (výchozí: ("*text": window.String, "text html": true, "text json": jQuery.parseJSON, "text xml": jQuery.parseXML))
    Typ: objekt.
    Parametr se objevil v jQuery-1.5 Určuje, které funkce budou použity k převodu hodnot z jednoho typu na druhý.
  • crossDomain (výchozí: false pro stejnou doménu, true pro požadavky napříč doménami)
    Typ: boolean.
    Tato možnost byla zavedena v jQuery-1.5 Pokud chcete provést požadavek mezi doménami (například JSONP) na stejné doméně, nastavte nastavení crossDomain na hodnotu true. To umožňuje například přesměrování serveru na jinou doménu.
  • data
    Typ: objekt, řetězec nebo pole.
    Data, která budou přenesena na server. Pokud data nejsou řetězcem, převedou se na řetězec dotazu. U požadavků GET jsou data připojena k URL. Objekt se musí skládat z párů klíč/hodnota. Pokud je hodnotou pole, pak jQuery seřadí hodnoty v závislosti na tradičním nastavení. Ve výchozím nastavení se například (foo:["bar1", "bar2"]) změní na &foo=bar1&foo=bar2 .
  • dataFilter(data, typ)
    Typ: funkce.
    Funkce, která předběžně zpracuje data odeslaná serverem, tzn. měl by fungovat jako filtr a vracet vyčištěný řetězec. Této funkci jsou předány dva parametry: zmíněná data a hodnota parametru datový typ. Funkce zadaná v dataFilter musí vrátit zpracovaná data.
  • dataType (výchozí: detekováno automaticky (xml, json, skript nebo html))
    Typ: řetězec.
    Datový typ, ve kterém se očekává odpověď ze serveru. Pokud není nastaveno, jQuery se jej pokusí určit automaticky pomocí MIME přijatého ze serveru.
  • chyba
    Typ: funkce
    Funkce, která bude volána, pokud požadavek na server selže. Má tři parametry: jqXHR (do použití 1.5 XMLHttpRequest), řetězec popisující chybu, ke které došlo, a také objekt výjimky, pokud k ní došlo. Možné hodnoty pro druhý argument jsou „timeout“, „error“, „notmodified“ a „parsererror“ (v neočekávaných případech může být vrácena hodnota null). Od verze jQuery-1.5 může tento parametr přijímat buď jednu funkci, nebo pole funkcí.
    Chybová událost nenastane, když je dataType skript nebo JSONP.
  • globální (výchozí: true)
    Typ: boolean.
    Zodpovědný za provoz globálních událostí požadavku ajax (například ajaxStart nebo ajaxStop). Pokud tento parametr nastavíte na hodnotu false , globální události pro tento požadavek nebudou vyvolány.
  • hlavičky
    Typ: objekt.
    Parametr se objevil v jQuery-1.5 Zde můžete zadat další hlavičky požadavků. Hodnoty pro toto nastavení budou zadány před voláním funkce beforeSend, kde lze provést konečné změny v záhlaví.
  • ifModified
    Typ: boolean.
    Pokud je toto nastavení nastaveno na hodnotu true , požadavek bude proveden se stavem „úspěšný“ pouze v případě, že se odpověď ze serveru liší od předchozí odpovědi. jQuery kontroluje tuto skutečnost pohledem na hlavičku Last-Modified. Od jQuery-1.4 se kromě Last-Modified kontroluje také 'etag' (obojí poskytuje server a je nutné upozornit prohlížeč, že požadovaná data ze serveru se oproti předchozímu požadavku nezměnila) .
  • isLocal
    Typ: boolean.
    Tato možnost byla zavedena v jQuery-1.5.1 Umožňuje nastavit zdrojový stav stránky na místní (jako by to bylo přes protokol souboru), i když to jQuery rozpoznalo jinak. Knihovna rozhodne, že stránka běží lokálně v případě následujících protokolů: file, *-extension a widget Doporučuje se nastavit hodnotu parametru isLocal globálně – pomocí funkce $.ajaxSetup() a nikoli. v nastavení jednotlivých ajaxových požadavků.
  • jsonp
    Typ: string nebo boolean.
    Definuje název parametru, který je přidán do adresy URL požadavku JSONP (ve výchozím nastavení se používá „zpětné volání“). Například nastavení (jsonp:"onJSONPLoad") se převede na část adresy URL řetězce "onJSONPLoad=?" . Počínaje verzí 1.5 zadáním false v tomto parametru zabráníte přidání dalšího parametru k adrese URL. V tomto případě musíte nastavit hodnotu nastavení jsonpCallback. Například: (jsonp:false, jsonpCallback:"callbackName") .
  • jsonpCallback
    Typ: řetězec nebo funkce.
    Definuje název funkce, která bude volána, když server odpoví na požadavek Jsonp. Ve výchozím nastavení jQuery generuje vlastní název pro tuto funkci, což je preferovaná možnost, která zjednodušuje práci knihovny. Jedním z důvodů, proč zadat vlastní funkci zpracování požadavků jsonp, je zlepšit ukládání požadavků GET do mezipaměti.
    Od jQuery-1.5 můžete v tomto parametru zadat funkci, abyste mohli sami zpracovat odpověď serveru. V tomto případě musí zadaná funkce vracet data přijatá ze serveru (v zadané funkci budou k dispozici v prvním parametru).
  • metoda (výchozí: "GET")
    Typ: řetězec.
    Parametr se objevil v jQuery-1.9.0 Umožňuje zadat typ požadavku na server ("POST", "GET", "PUT")
  • mimeType
    Typ: řetězec.
    Parametr se objevil v jQuery-1.5.1 V tomto poli můžete zadat datový typ, ve kterém se očekává odpověď ze serveru namísto XHR
  • Heslo
    Typ: řetězec.
    Heslo pro ověření na serveru, je-li požadováno.
  • processData (výchozí hodnota true)
    Typ: boolean.
    Ve výchozím nastavení jsou data přenášená na server převedena z objektu na řetězec dotazu (formát adresy URL: fName1=value1&fName2=value2&...) a odeslána jako "application/x-www-form-urlencoded" . Pokud potřebujete odeslat dokument DOM nebo jiná data, která nelze převést, nastavte volbu processData na false .
  • scriptCharset
    Typ: řetězec.
    Platí pouze pro požadavky Ajax GET, typ dat může být buď „jsonp“ nebo „script“. Pokud server v doméně třetí strany používá jiné kódování než vaše, musíte zadat kódování serveru třetí strany.
  • stavový kód
    Typ: objekt.
    Parametr se objevil v jQuery-1.5.0 Sada párů, ve kterých jsou kódy provádění požadavků spojeny s funkcemi, které budou volány. Například pro kód 404 (stránky neexistují) můžete na obrazovce zobrazit zprávu:

    $.ajax(( statusCode: ( 404: function() ( alert("stránka nenalezena"); ) ) ));

    $. ajax ((

    stavový kód: (

    404 : funkce () (

    upozornění ("stránka nenalezena" ) ;

    } ) ;


    Pokud byl požadavek úspěšný, pak jako parametr bude mít anonymní funkce pro úspěšné provedení požadavku stejné parametry jako funkce obsluhy (uvedené v parametru úspěchu) a v případě chyby stejné parametry jako u chyby. funkcí.
  • úspěch(data, textStatus, jqXHR)
    Typ: funkce, pole.
    Funkce, která bude volána, pokud se požadavek na server úspěšně dokončí. Má 3 argumenty:
    • data odeslaná serverem a předzpracovaná;
    • řetězec se stavem provedení (textStatus);
    • objekt jqXHR (ve verzích před 1.5 se místo jqXHR používá XMLHttpRequest). Od jQuery 1.5 může tento parametr namísto jediné funkce přijímat pole funkcí.
  • Časový limit
    Typ: číslo.
    Doba čekání na odpověď ze serveru v milisekundách. Přepíše globální nastavení stejného parametru v $.ajaxSetup(). Při překročení této doby bude požadavek ukončen chybou a dojde k chybové události, která bude mít stav „timeout“.
    Čas se počítá od okamžiku volání funkce $.ajax. Může se stát, že v tuto chvíli poběží několik dalších požadavků a prohlížeč zdrží provedení aktuálního požadavku. V tomto případě může časový limit dokončit, i když ve skutečnosti požadavek ještě ani nebyl spuštěn.
    V jQuery-1.4 a dřívějších verzích, když vyprší časový limit objektu XMLHttpRequest, přejde do chybového stavu a přístup k jeho polím může vyvolat výjimku. Ve Firefoxu 3.0+ nebudou požadavky skriptů a JSONP přerušeny, pokud vyprší časový limit. Budou dokončeny i po uplynutí této doby.
  • tradiční
    Typ: boolean.
    Chcete-li použít tradiční možnosti převodu (serializace), nastavte tento parametr na hodnotu true.
  • typ (výchozí: "GET")
    Typ: řetězec.
    Podobně jako parametr metody. Parametr se používá v jQuery starším než 1.9.0
  • url (výchozí: adresa aktuální stránky)
    Typ: řetězec.
    Definuje adresu, na kterou bude požadavek odeslán.
  • uživatelské jméno
    Typ: řetězec.
    Uživatelské jméno pro ověření na serveru, je-li požadováno.
  • xhr (výchozí: ActiveXObject v IE, XMLHttpRequest v jiných prohlížečích)
    Typ: funkce.
    Funkce, která poskytne objekt XMLHttpRequest. Ve výchozím nastavení je pro prohlížeče IE tento objekt ActiveXObject a v ostatních případech je to XMLHttpRequest. Pomocí této možnosti můžete implementovat svou vlastní verzi tohoto objektu.
  • xhrFields
    Typ: objekt.
    Parametr se objevil v jQuery-1.5.1 Sada párů (název: hodnota) pro změnu/přidání hodnot odpovídajících polí objektu XMLHttpRequest. Můžete například nastavit jeho vlastnost withCredentials na hodnotu true při provádění požadavku mezi doménami:

    $.ajax(( url: a_cross_domain_url, xhrFields: ( withCredentials: true ) ));

    $. ajax ((

    url: a_cross_domain_url,

    xhrFields :(

    with Credentials: true

    } ) ;

  • Jak bylo uvedeno výše, $.ajax() je nejzákladnější metoda a všechny následující metody jsou pouze obaly. Velmi často není potřeba tuto funkci volat, protože Existují alternativy vyšší úrovně jako , a . Jsou snadněji pochopitelné a použitelné, ačkoli $.ajax() je flexibilnější řešení.

    Nejjednodušším případem použití by bylo volání $.ajax() bez zadání parametrů:

    $. ajax();

    Obsluha událostí

    Nastavení beforeSend, error, dataFilter, success a complete vám umožní nastavit obslužné rutiny událostí, které se vyskytují v určitých bodech při provádění každého požadavku ajax.

    • beforeSend nastane bezprostředně před odesláním požadavku na server;
    • dojde k chybě, pokud požadavek selže;
    • dataFilter nastane, když data dorazí ze serveru. Umožňuje zpracovávat „surová“ data odeslaná serverem;
    • úspěch nastane, pokud se požadavek úspěšně dokončí;
    • dokončení nastane vždy, když je požadavek dokončen.
    • úspěch : funkce () (

      upozornění ("Data byla úspěšně odeslána." ) ;

      } ) ;

      Pozornost! Nastavení .success(), .error() a .complete() diskutovaná výše byla přidána do jQuery-1.5 kromě standardních metod .done(), .fail() a .then() pro odložený objekt, které lze použít k nastavení obslužných rutin, avšak počínaje verzí jQuery-1.8 budou tyto tři metody zastaralé.

      parametr dataType

      Funkce $.ajax() se dozví o typu dat odesílaných serverem ze samotného serveru (přes MIME). Navíc je zde možnost osobně naznačit (objasnit), jak mají být tyto údaje interpretovány. To se provádí pomocí parametru dataType. Možné hodnoty pro tento parametr:

      • „xml“ – výsledný xml dokument bude dostupný v textové podobě. Můžete s ním pracovat pomocí standardních nástrojů jQuery (stejně jako s html dokumentem).
      • "html" - výsledný html bude dostupný v textové podobě. Pokud obsahuje skripty ve značkách, pak se automaticky spouštějí pouze při umístění html textu do DOM.
      • „script“ - přijatá data budou spuštěna jako javascript. Proměnné, které obvykle obsahují odpověď ze serveru, budou obsahovat objekt jqXHR.
      • „json“, „jsonp“ – přijatá data budou předem převedena do javascriptového objektu. Pokud se analýza nezdaří (což se může stát, pokud soubor json obsahuje chyby), bude vyvolána výjimka chyby analýzy souboru. Pokud je server, ke kterému přistupujete, v jiné doméně, měl by být místo json použit jsonp.
      • „text“ - přijatá data budou k dispozici jako prostý text bez předběžného zpracování.
      Odesílání dat na server

      Ve výchozím nastavení se požadavek na server provádí pomocí metody HTTP GET. Pokud potřebujete vytvořit požadavek pomocí metody POST, musíte zadat příslušnou hodnotu v nastavení typu. Data odeslaná pomocí metody POST budou převedena do UTF-8, pokud jsou v jiném kódování, jak vyžaduje standard W3C XMLHTTPRequest.

      Parametr data lze zadat buď jako řetězec ve formátu klíč1=hodnota1&klíč2=hodnota2 (formát přenosu dat v adrese URL), nebo jako objekt se sadou párů (název:hodnota) - (klíč1: "hodnota1", klíč2: "hodnota2"). V druhém případě před odesláním dat jQuery převede daný objekt na řetězec pomocí $.param(). Tento převod však lze zvrátit nastavením nastavení processData na hodnotu false. Převod na řetězec je nežádoucí, například v případě odesílání xml objektu na server. V tomto případě je vhodné změnit nastavení contentType

      url: "test.php" ,

      úspěch : funkce (data) (

      upozornění ("Data přijata: " + data ) ;

      } ) ;

    říct přátelům