2011-02-28 153 views
1
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。我可以在退货之前提醒,所以我知道这很好。在另一个函数,我试图让我的布尔和使用它像这样:Javascript函数没有正确返回?

var isSwap = IsSwap(); 
      if (isSwap) 

,并口口声声说isSwap是不确定的。为什么?

+0

IS isSwap定义?你在初始化之前调用函数吗? – 2011-02-28 16:04:47

+0

乍一看,你需要逃生者双引号中urlString变量 – Kyle 2011-02-28 16:05:36

+0

函数或变量?该功能被称为罚款是。我可以在return语句之前放置一个alert,并在需要时弹出它。虽然当我将它分配给变量isSwap时,有些事情正在改变为“真”,以致于在调用中未定义。 – slandau 2011-02-28 16:05:44

回答

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

检查这一行:

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

尝试使用单引号,像这样:

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

你的双引号内的双引号是最有可能您的问题。

+0

它使控制器调用绝对正常,并获得最后的return语句。 – slandau 2011-02-28 16:07:16

+0

-1字符串很好。问题在于Ajax调用是异步的,因此逻辑需要位于成功处理函数中。 – johnhunter 2011-02-28 16:21:34

3

你不能从一个Ajax调用那样返回。

你在做什么实质上从内部函数返回true。

你应该只给你打电话的成功方法需要的任何代码,因为这是你能保证Ajax调用已经完成了唯一的一次。

+0

如果我设置了ansyc:false,那会起作用吗? – slandau 2011-02-28 16:07:45

+0

你仍然不能直接返回它,但你可以在IsSwap函数内创建一个局部变量,设置成功后返回。 – 2011-02-28 16:09:22

+1

@slandau不,它不会。 'IsSwap' *不会返回值*,所以默认情况下会得到一个未定义的返回值。 – 2011-02-28 16:10:10

0

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

无论你需要做的基础上isSwap,你应该在你的AJAX请求的成功处理程序做的。

UPDATE:这最后一段不正确有关工作,但值得一提的关于同步不被推荐:

或者,你可以让AJAX请求同步(通过添加async:false到AJAX选项),并保持它是如何拥有它 - 但我不会推荐这个,因为你的浏览器在等待响应时会“冻结”。

+0

它是否同步并不重要,他没有从IsSwap返回值。 – 2011-02-28 16:12:24