Autor Zpráva
DeeDee
Profil *
Zdravim všechny,

prosim o radu ohledně ajaxu a funkce load v jquery.

Při kliknuti na dopravu ve výběru dopravy se má obnovit oblast se seznamem plateb a následne i oblast s košíkem, kde bude uz zapsaná vybraná doprava a nabídnutý druh platby.

Mam tuto funkci, kterea reaguje na kliknuti na vyber dopravy (a zaroven na vyber platby, ale to ted neni myslim dulezite
jQuery(document).delegate("form.form_dp input:checkbox, form.form_dp2 input:checkbox",'click', function (event) {

event.preventDefault();
var that = this; 

var id= this.form.novy_typ.value;
var karta_ord= this.form.karta_ord.value;
var nazev= this.form.nazev.value; 

var url="ajax_obj_doprava.php?sluzba="+nazev+'&id='+id+'&karta_ord='+karta_ord+"&x=" + (new Date()).getTime();


//alert(url);

jQuery.ajax({
url: url,
type: "GET",
//data: form.serialize(),
data: {},
// Disable caching of AJAX responses
cache: false,
success: function (data) {

if(nazev=="platba")
{
jQuery('input[name=platba]').attr('checked', false);
}
if(nazev=="doprava")
{
if(jQuery('#platba_box').load("ajax_platba_box.php")){}; 
jQuery('input[name=rdp]').attr('checked', false);
}
that.checked=true;
if(jQuery('#kos').load("objednavka_kos2.php")){};

}
});
});

Všimněte si těch if pred funkcema load() .. kdyz totiž do těch podmínek dám alert, tak se spustí a boxiky s platbou a košíkem se překreslují správně. Když dám alert pryč, tak se boxik s košíkem opožďuje a vypisuje mi tam špatnou platbu .

Test jsem dala na stranku http://www.ihodinarstvi.cz/objednavka2 (zkuste d¨át do košíku něco levnějšího, třeba zapalovač a jdete do košíku, pak do adresy na konec napište dvojku.

Na lokalnim serveru mi to takto funguje ale po nahrani na ostry server se to vykresluje spatne.

Netusi nekdo, cim by to mohlo byt?

A co dela funkce alert za operace, ze se pri jejim pouziti boxik vykresli spravne, ale bez alertu ne?

Dekuji za jakopukoli radu.

Zdravim vsechny, prosim o radu ohledne ajaxu a funkce load v jquery. Pri kliknuti na dopravu ve vyberu dopravy se ma obnovit oblast se seznamem plateb a nasledne i oblast s kosikem, kde bude uz zapsana vybrana doprava a nabidnuty druh platby. Mam tuto funkci, kterea reaguje na kliknuti na vyber dopravy (a zaroven na vyber platby, ale to ted neni myslim dulezite jQuery(document).delegate("form.form_dp input:checkbox, form.form_dp2 input:checkbox",'click', function (event) { event.preventDefault(); var that = this; var id= this.form.novy_typ.value; var karta_ord= this.form.karta_ord.value; var nazev= this.form.nazev.value; var url="ajax_obj_doprava.php?sluzba="+nazev+'&id='+id+'&karta_ord='+karta_ord+"&x=" + (new Date()).getTime(); //alert(url); jQuery.ajax({ url: url, type: "GET", //data: form.serialize(), data: {}, // Disable caching of AJAX responses cache: false, success: function (data) { if(nazev=="platba") { jQuery('input[name=platba]').attr('checked', false); } if(nazev=="doprava") { if(jQuery('#platba_box').load("ajax_platba_box.php")){}; jQuery('input[name=rdp]').attr('checked', false); } that.checked=true; if(jQuery('#kos').load("objednavka_kos2.php")){}; } }); }); Vsimnete si tech if pred funkcema load() .. kdyz totziz do tech podminek dam alert, tak se boxiky s platbou a kosikem prekresluji spravne, kdyz dam alert pryc, tak se boxik s kosikem opozduje a vypisuje mi tam spatnou platbu. Test jsem dala na stranku http://www.ihodinarstvi.cz/objednavka2 (zkuste dat do kisku neco levnejsiho, treba zapalovac a jdete do kosiku, pak do adresy na konec napiste dvojku. Na lokalnim serveru mi to takto funguje ale po nahrani na ostry server ihodinartsvi se to vykresluje spatne. Netusi nekdo, cim by to mohlo byt? A co dela funkce alert, ze se pri jejim pouziti boxik vykresli spravne, ale bez alertu ne? Dekuji za jakopukoli radu.
Keeehi
Profil
Blíže jsem to nezkoumal, ale vypadá to, že se kód, co se má provádět až po tom co dorazí odpověď provádí dříve než by měl. Ten alert to řeší protože vykonávání javascriptu pozastaví a než ho odkliknete, data stihnou přijít. Tomu odpovídá i funkčnost na localhostu, jelikož tam je odpověď téměř okamžitá. Na localhostu by problémové chování mělo jít snad simulovat pomocí sleep(1); na začátku scriptu který odpovídá na ajaxový požadavek. Takže se podívejte na časovou posloupnost.
DeeDee
Profil *
Keeehi:
Děkuju.
Je možné, že se load("objednavka_kos2.php") spusti driv nez probehne cele load("ajax_platba_box.php") ? I kdyz je v kodu drive?
if(nazev=="doprava")
{
if(jQuery('#platba_box').load("ajax_platba_box.php")){}; 
jQuery('input[name=rdp]').attr('checked', false);
}
that.checked=true;
if(jQuery('#kos').load("objednavka_kos2.php")){};

Pokud ano, znáte něco jako
"pokud se kompletne provede load("ajax_platba_box.php"), proved load("objednavka_kos2.php")?"

Zkoušela jsem
if(jQuery('#platba_box').load("ajax_platba_box.php")){jQuery('#kos').load("objednavka_kos2.php");};

ale výsledek je stejný, jako dosud.


Nebo alespon pozastaveni ma par milisekund. zkoušela jsem timeout, ale taky bez výsledku, takže buď je problém někde jinde, nebo provedení druhého loadu zkusit zabrzdit něčím jiným
Keeehi
Profil
DeeDee:
Je možné, že se load("objednavka_kos2.php") spusti driv nez probehne cele load("ajax_platba_box.php") ? I kdyz je v kodu drive?
Samozřejmě. Jelikož je AJAX asynchronní (to první A). Pokud potřebujete vykonat něco až po dokončení požadavku, slouží k tomu callback funkce, která se zavolá po dokončení požadavku. Je to druhý parametr funkce load (nebo třetí, ale ve vašem případě to bude druhý). http://api.jquery.com/load/#example-1
DeeDee
Profil *
Keeehi:
Mockrát děkuju :-)
Je to vyřešené
if(jQuery('#platba_box').load("ajax_platba_box.php", function(){jQuery('#kos').load("objednavka_kos2.php"); kos_ok=true;})){};
Ještě jednou Dík!!

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0