我正在调用连接到函数中的if语句的子函数。虽然子函数返回true或false,但它不起作用
if (functionAAA()){ alert("111111111"); if (functionBBB()){ alert("2222222"); if (functionCCC()){ alert("333333333333"); } } }
functionAAA,functionBBB,functionCCC返回true。我期待得到这些警报,但他们不能工作。我做错了什么?
我认为问题是功能方面.. functionAAA定义是
function functionAAA(){
var indexId = 1;
var dataItem = datasourceAppList.at(indexId);
var deviceKey = localStorage.getItem('LsDeviceKey');
var baseUrl = localStorage.getItem('LsBaseUrl');
var errorMessageInfoText;
var status
$.ajax({
url: baseUrl + '/test/cloud/FE/1.0/test.php',
data: {
PAR1: dataItem.par1,
PAR2: dataItem.par2,
PAR3: deviceKey,
PAR4: dataItem.par3,
PAR5: "5664456"
},
type: 'GET',
crossDomain: true,
dataType: 'jsonp',
error: function () {
showErrorDialog("Key Validation Failure");;
}
}).done(function (data) {
$.each(data, function (k, v) {
// alert("k " + k + " v " + v);
if (k == 'STATUS') {
status = v;
} else if (k == 'ERROR_MESSAGE') {
errorMessageInfoText = v;
}
})
if (status == 'TRUE') {
alert("ok");
return true;
} else {
return false;
};
});
}
其他函数直接返回true;
顺便说一句,我收到了" ok"功能警告答案 0 :(得分:1)
您的功能不会返回任何内容。你不能进行异步调用并返回结果 - 这是异步的意思。如果你想在ajax调用完成后做一些事情,你需要给函数一个回调并调用它,而不是试图从ajax处理程序返回。
答案 1 :(得分:1)
您需要重新构建代码。 .done()
内的匿名函数在functionAAA
完成并返回undefined
后执行。毕竟,AJAX调用是异步的。
$.ajax
返回promise
,因此一个选项是使用.then()
:
function functionAAA(){
return $.ajax({
url: 'http://jsfiddle.net/echo/jsonp/',
dataType: 'jsonp',
});
}
functionAAA().then(function() {
alert("111111111");
if (functionBBB()){
alert("2222222");
if (functionCCC()){
alert("333333333333");
}
}
});
在行动on JSFiddle中查看。
答案 2 :(得分:0)
以下脚本适合我。你能发布你的功能AAA,BBB等吗?
<script>
function functionAAA() {
return true;
}
if(functionAAA()){
alert("hi");
}
</script>
答案 3 :(得分:0)
添加此项并使您的ajax调用同步,以便等待响应,检查并相应地返回true / false。现在它不应该返回任何东西。
async: false
答案 4 :(得分:-3)
尝试...
if (functionAAA()){
alert("111111111");
if (functionBBB()){
alert("2222222");
else if (functionCCC()){
alert("333333333333");
}
}
}