Autor | Zpráva | ||
---|---|---|---|
PP Profil * |
#1 · Zasláno: 3. 11. 2009, 10:40:19
Zdravím, mám problém odovzdať vrátený reťazec z AJAXu cez JQUERY. Problém je popísaný v kóde, hlavne ma zaujíma, či je vôbec možné nejakým spôsobom odovzdať potrebnú hodnotu pri danej konštrukcii.
var helpme; //zavedenie pomocnej premennej, ktorá by mala prevziať potrebnú hodnotu. Ale neprevezme. jQuery(function() { $('input#suggestBox').jsonSuggest( function(text, wildCard, caseSensitive, notCharacter) { /*Táto funkcia má vrátiť nejaký reťazec pre ďaľšie spracovanie - return jsonString. Aké dáta má poslať je závislé na premennej text*/ /*Tu potrebujem zavolať ajax aby mi vrátil potrebné dáta na základe premennej text. Premmená text je iba v tejto funkcii, nedá sa ináč získať */ $.get("/vratdata.php?search="+text, function(data){ /*dáta su tu, ako test je volaný alert(data). Problém je ako ich dostať do premmenej jsonString*/ // alert(data); /*Nieco ako return data , nefunguje. Hodnota premmenej data je len tu. Pokiaľ ju aj odovzdám do nejakej premennej helpme teda helpme = data; tak helpme bude obsahovat data iba v tejto urovni.*/ }); /*Ak tu zavolam helpme jej obsah je defaultny, teda prazdny. */ /*jsonString by mal obsahovat hodnotu premennej data*/ return jsonString; }, {ajaxResults:true, onSelect:callback, maxResults:20}); }); |
||
Chamurappi Profil |
#2 · Zasláno: 3. 11. 2009, 11:21:25
Reaguji na PP:
Ne. Vysílání HTTP požadavků je asynchronní, v době, kdy se zpracovává callback, je už funkce, která požadavek vyvolala, dávno dokončená. Je to podobné, jako kdybys volal setTimeout a požadoval, aby načasovaná akce ovlivnila věci následující za nastavením timeoutu. |
||
Shulík Profil |
#3 · Zasláno: 3. 11. 2009, 11:33:33
Nešlo by to vyřešit odesláním synchronního HTTP requestu?
EDIT: Mám Firefox 3.5 a s MooTools se mi to pomocí synchronního XHR povedlo. |
||
PP Profil * |
#4 · Zasláno: 3. 11. 2009, 15:00:32
Chamurappi:
Ďakujem, slovko asynchronní bolo to čo objasnilo celý problém. S pomocou googla a "JQUERY asynchronní" sa riešenie našlo hneď. Prikladám riešenie ak by mal niekto obdobný problém. Shulík: Áno, už som to našiel. V JQUERY treba nastaviť pri volaní AJAX async: false a data odovzdat cez eval. jQuery(function() { $('input#suggestBox').jsonSuggest( function(text, wildCard, caseSensitive, notCharacter) { $.ajax({ type: 'GET', url: '/vratdata.php?search='+text, data: {}, dataType: 'text', async: false, success: function(data){ jsonString = eval("(" + data + ")"); } }); return jsonString; }, {ajaxResults:true, maxResults:20}); }); |
||
Chamurappi Profil |
#5 · Zasláno: 3. 11. 2009, 15:04:45
Reaguji na PP:
To je špatné řešení. Synchronní requesty jsou schopné zakousnout prohlížeč, což přiměje řadu uživatelů k proklínání neschopného programátora. Vždy jde najít řešení s asynchronní komunikací. |
||
Časová prodleva: 14 let
|
0