Autor Zpráva
PP
Profil *
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
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
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 *
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
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í.

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: