2016-04-10, 16:31
  #1
Medlem
ThatJs avatar
Hej!

Jag vill kunna ändra min globala variabel "nyText" till ett annat värde som jag fått genom en AJAX-request. Jag har gjort en callback-funktion och kan "alerta" värdet från insidan av funktionen - dock går det inte utanför.

Jag förstår att AJAX är asynkroniserat, men jag kommer verkligen inte på hur man löser detta.

Stort tack på förhand!

Ajax-kod:
Kod:
    $.ajax({
  type: 'GET',
  url: 'http://JUST_A_LINK_IGNORE_THIS',
  success: 

  function informationData(data) {

    $.each(JSON.parse(data), function(imgName,order){


        var path_image = order[0].path_image;
        imgName = order[0].path_image;
        dataReceiver(imgName);  

    });
  }

});

Övrig kod:
Kod:
var nyText;

function dataReceiver(imgName){

nyText = imgName;
//alert(nyText);  would have worked


}
dataReceiver();
alert(nyText); //will not work
Citera
2016-04-10, 16:39
  #2
Medlem
Förstår inte riktigt vad det är du försöker göra här? I kodsnutt nr 2 så anropar du funktionen dataReceiver utan argument, detta innebär att parametern imgName kommer att vara undefined, därmed sätter du också variabeln nyText till undefined.
Citera
2016-04-10, 16:45
  #3
Medlem
Protons avatar
Citat:
Ursprungligen postat av ThatJ
Hej!

Jag vill kunna ändra min globala variabel "nyText" till ett annat värde som jag fått genom en AJAX-request. Jag har gjort en callback-funktion och kan "alerta" värdet från insidan av funktionen - dock går det inte utanför.

Jag förstår att AJAX är asynkroniserat, men jag kommer verkligen inte på hur man löser detta.

Stort tack på förhand!

Ajax-kod:
Kod:
    $.ajax({
  type: 'GET',
  url: 'http://JUST_A_LINK_IGNORE_THIS',
  success: 

  function informationData(data) {

    $.each(JSON.parse(data), function(imgName,order){


        var path_image = order[0].path_image;
        imgName = order[0].path_image;
        dataReceiver(imgName);  

    });
  }

});

Övrig kod:
Kod:
var nyText;

function dataReceiver(imgName){

nyText = imgName;
//alert(nyText);  would have worked


}
dataReceiver();
alert(nyText); //will not work
Förstår inte problemet.

Funkar verkligen inte följande?

[PHP]
var nyText;
$.ajax({
type: 'GET',
url: 'http://JUST_A_LINK_IGNORE_THIS',
success:

function informationData(data) {

$.each(JSON.parse(data), function(imgName,order){


var path_image = order[0].path_image;
imgName = order[0].path_image;
dataReceiver(imgName);

});
}

});


function dataReceiver(imgName){

nyText = imgName;
alert("nytext = " + nyText);

}

[/PHP]

Är det så att du vill vara säker på att nyText verkligen innehåller nåt kan du ju göra anropet synkront genom att lägga till följande:

[PHP]
$.ajax({
type: 'GET',
url: 'http://JUST_A_LINK_IGNORE_THIS',
async :false,
//more code
[/PHP]Så kommer anropet stoppa javascriptexekveringen tills det kommer ett svar från servern, därefter kommer det köra vidare.
Citera
2016-04-10, 16:56
  #4
Medlem
ThatJs avatar
Hej igen,

Det fungerar inte genom att lägga till async: false, i koden. Det spelar alltså ingen roll vare sig det är asynkroniserat eller ej, vilket är konstigt.

Jag lade till dataReceiver(imgName); i koden precis före alert(nyText), men det fungerar ännu inte. Svaret jag får är:

HTML-kod:
test.html:54 Uncaught ReferenceError: imgName is not defined Line 54

Och på Line 54 står det:

HTML-kod:
dataReceiver(imgName);
Citera
2016-04-10, 18:58
  #5
Medlem
Citat:
Ursprungligen postat av ThatJ
Hej igen,

Det fungerar inte genom att lägga till async: false, i koden. Det spelar alltså ingen roll vare sig det är asynkroniserat eller ej, vilket är konstigt.

Jag lade till dataReceiver(imgName); i koden precis före alert(nyText), men det fungerar ännu inte. Svaret jag får är:

HTML-kod:
test.html:54 Uncaught ReferenceError: imgName is not defined Line 54

Och på Line 54 står det:

HTML-kod:
dataReceiver(imgName);

Du deklarerar variabeln imgName inuti din ajaxcallback, du har inte tillgång till den utanför den funktionen. Det hade dock inte spelat så stor roll om du hade det eftersom ajaxcallbacken med största sannolikhet inte körts ännu då du anropar dataReceiver, och imgName hade därmed varit undefined ändå.

Jag har fortfarande lite problem med att förstå vad du försöker göra, du anropar ju dataReceiver i din ajaxcallback och variabeln nyText kommer då att sättas till värdet som finns i variabeln imgName. Varför anropar du dataReceiver igen?
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in