2010-04-21 2 views
2

Необходима помощь. Я пишу функцию, которая возвращает результат вызова ajax, но я не получил никаких результатов, я думаю, что это проблема с областью, но есть ли способ сделать это? Вот мой код:Функция JavaScript, которая возвращает результат вызова ajax

function Favorites() { 
    var links; 
    $.ajax({ 
     type: "GET", 
     url: "/Services/Favorite.svc/Favorites", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     cache: false, 
     success: function(msg) { 
      links = (typeof msg.d) == 'string' ? eval('(' + msg.d + ')') : msg.d; 
     } 
    }); 
    return links; 
}; 

ответ

3

Ваша проблема заключается в том, что запрос HTTP вы делаете это asnychronous и ваши Favorites функция возвращает до запроса Ajax вернулся. Вам нужно будет изменить свою функцию так, что она принимает функцию обратного вызова, которая будет выполнено после того, как ответ пришел обратно:

function Favorites(callback) { 
    $.ajax({ 
     type: "GET", 
     url: "/Services/Favorite.svc/Favorites", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     cache: false, 
     success: function(msg) { 
      var links = (typeof msg.d == 'string') ? eval('(' + msg.d + ')') : msg.d; 
      callback(links); 
     } 
    }); 
}; 

Favorites(function(links) { alert(links); }); 

Помимо: соглашение, что только функция, предназначенная для использования в качестве конструкторов должна начинаться с заглавной буквой, поэтому ваша функция будет лучше названа favorites.

+0

Спасибо большое за ответ и комментарии! – ilkin

6

Ajax является асинхронным, то есть когда выполняется return links, функция обратного вызова в success, возможно, даже не была вызвана.

Расширьте функцию принять обратного вызова:

function Favorites(callback) { 
    var links; 
    $.ajax({ 
     type: "GET", 
     url: "/Services/Favorite.svc/Favorites", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     cache: false, 
     success: callback 
    }); 
}; 

и назвать его:

var callback = function(msg) { 
     links = (typeof msg.d) == 'string' ? eval('(' + msg.d + ')') : msg.d; 
     // do other stuff with links here 
} 

Favorites(callback); 
Смежные вопросы