2010-01-08 125 views
3

我试图让一个函数从ajax调用返回一个字符串。从ajax调用返回变量的函数

这是我的代码:

function GetText(getThis) { 
    var current = GetMarketAndLang(); 
    var dataToReturn = "Error"; 
    $.get('inc/ajaxGetText.php', {lang : current.lang, market : current.market, name : getThis}, 
     function(data){ 
      dataToReturn = data; 
    }); 
    return dataToReturn; 
} 

使用Firebug我可以看到,Ajax调用是正确的,但整体功能仍返回文本“错误”,而不是“和”。为什么是这样,我该怎么办?

谢谢。

回答

5

这是因为AJAX查询的异步性质–函数在响应返回之前返回。为了解决这个问题,你必须使用一个全功能的$.ajax()功能,并设置asyncfalse

function GetText(getThis) { 
    var current = GetMarketAndLang(); 
    var dataToReturn = "Error"; 

    $.ajax({ 
     url: 'inc/ajaxGetText.php', 
     type: 'GET', 
     async: false, 
     success: function(data) { 
      dataToReturn = data; 
     } 
    }); 

    return dataToReturn; 
} 

这迫使脚本等到请求脚本的执行前返回才能继续,因此,该变量现在是AJAX调用返回的那个。

+0

感谢您的快速响应! – Marreone 2010-01-08 23:55:12

+1

-1虽然它可能会使代码正常工作,但这几乎不是正确的解决方案。 – 2012-02-03 22:32:18

3

这是因为AJAX调用是异步的。您的

function(data){ 
    dataToReturn = data; 
} 

只有在异步AJAX调用完成后才会运行。 return dataToReturn实际上会在AJAX调用中的回调函数之前执行。

这样做的理想方法是调用回调中使用dataToReturn的函数。

或者将函数传递给GetText,以便在AJAX调用完成时执行。

1

ajax调用异步执行,这就是为什么“错误”立即返回。要获得ajax结果,您需要使用$ .ajax来执行同步GET。