---
title: "retunera värde från ajax metod"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/187585-retunera-värde-från-ajax-metod"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "Dino"
published: "2011-08-11T13:16:49.000Z"
updated: "2011-08-11T14:41:13.000Z"
replies: 3
views: 986
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/187585-retunera-värde-från-ajax-metod"
---

# retunera värde från ajax metod

## #1 — Dino, 2011-08-11T13:16Z

I en loop vill jag anropa en funktion som hämtar data via ajax som jag vill att den skall retunera till obj2 i loopen. Genom att sätta tredje parametern i xmlhttp.open till true så blir ju anropet asynkront och jag hade hoppats på att jag då kunde retunera värdet. Men det gick ju inte. 
Så finns det något sätt att lösa detta på?

```
for (var i = 0; i < l; i++) {
    var obj= list[i];
    //do things with obj

    var obj2= getMore(obj.regionId);
    //do things with obj2
}

function getMore(regionid) {
    var DTO = { "regionid":  regionid}] };

    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", '[URL]', true);
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4) {
           [B] //Vill att detta skall vara funktionens return värde[/B]
            return JSON.parse(xmlhttp.responseText) || null;
        }
    };        
    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    xmlhttp.setRequestHeader("X-Request", "JSON");
    xmlhttp.send('json=' + JSON.stringify(DTO));
}
```

Permalänk: https://www.webforum.nu/p/187585

## #2 — SPiN, 2011-08-11T13:49Z

Standardförfarande är att man använder en callback-funktion, i och med att det sker ett asynkront anrop by-default.

Så funktionens signatur hade jag ändrat till:

```
function getMore(regionid, [b]callback[/b]) {
...
```

Och istället för att returnera ett värde, anropar du bara callback-funktionen med värdet som parameter:

```
...
if (xmlhttp.readyState == 4) {
    callback(JSON.parse(xmlhttp.responseText));
}
...
```

I din loop så blir då anropet:

```
for (var i = 0; i < 1; i++) {
    var obj = list[i];
    getMore(obj.regionId, [b]function(return_value) {
        // Do things with return_value
    }[/b]);
}
```

Permalänk: https://www.webforum.nu/p/2281970

## #3 — Oldtimer, 2011-08-11T13:49Z

Asynkronprogrammering kräver att man tänker lite annorlunda. Din funktion getMore har ju returnerat för länge sedan när svaret väl kommer. Det du har i din return är ju vad du ger XMLHTTP tillbaka när dess onreadystatechange event triggar. Vid det laget är din loop redan färdig.

Permalänk: https://www.webforum.nu/p/2281971

## #4 — Dino, 2011-08-11T14:41Z

Tackar SPiN

Permalänk: https://www.webforum.nu/p/2281977

---

Tråden på webben: https://www.webforum.nu/amne/javascript/187585-retunera-värde-från-ajax-metod
