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
未定义。为什么呢?
答案 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")%>';
双引号内的双引号很可能是你的问题。