Javascript函数无法正常返回?

时间:2011-02-28 16:03:09

标签: javascript

function IsSwap()
    {
        var urlString = "<%= System.Web.VirtualPathUtility.ToAbsolute("~/mvc/Indications.cfc/GetModelType")%>";
        var id = 
            {
                id : GetGUIDValue()
            }
            $.ajax({
                type: "POST",
                url: urlString,
                data: id,
                success: function(data) {
                    if (data.toString() == 'SwapModel')
                    {
                        return true;
                    }
                }
            });

预期结果为true。我可以在返回之前提醒,所以我知道它已经达到了这一点。在另一个函数中,我试图得到我的bool并像这样使用它:

var isSwap = IsSwap();
            if (isSwap)

并且一直说isSwap未定义。为什么呢?

4 个答案:

答案 0 :(得分:3)

你不能从那样的ajax调用返回。

基本上你正在做的是从内部函数返回true。

您应该在成功方法中调用所需的任何代码,因为这是唯一可以保证ajax调用已完成的时间。

答案 1 :(得分:3)

您正在使用异步的ajax请求。您无法从ajax请求返回值。试试这个:

function IsSwap()
    {
        var urlString = "<%= System.Web.VirtualPathUtility.ToAbsolute("~/mvc/Indications.cfc/GetModelType")%>";
        var id = 
            {
                id : GetGUIDValue()
            }
            $.ajax({
                type: "POST",
                url: urlString,
                data: id,
                success: function(data) {
                    if (data.toString() == 'SwapModel')
                    {
                        ResultIsTrue(); // call another function.
                    }
                }
            });

执行后,而不是使用它:

var isSwap = IsSwap();
if (isSwap){
 // Do Somethinh
}

试试:

IsSwap();
function ResultIsTrue(){
 // Do Same Thing
}

答案 2 :(得分:0)

AJAX请求是异步的,这意味着IsSwap将在响应AJAX请求之前返回。

无论你需要做什么基于isSwap,你都应该在你的AJAX请求的成功处理程序中做。

更新:最后一段对于它的工作是不正确的,但值得注意的是同步不被推荐:

或者,您可以使AJAX请求同步(通过向AJAX选项添加async:false)并保留它的方式 - 但是我不建议这样做,因为您的浏览器会在等待时“冻结”为了回应。

答案 3 :(得分:-2)

检查此行:

var urlString = "<%= System.Web.VirtualPathUtility.ToAbsolute("~/mvc/Indications.cfc/GetModelType")%>";

尝试使用单引号:

var urlString = '<%= System.Web.VirtualPathUtility.ToAbsolute("~/mvc/Indications.cfc/GetModelType")%>';

双引号内的双引号很可能是你的问题。