【发布时间】:2014-03-14 20:16:35
【问题描述】:
我意识到 SO 包含有关此主题的材料,我已经完成了它,但似乎无法让它发挥作用。
我的函数接受 JSON 响应,对其进行解析并在成功时返回 false,在错误时返回 true(这是故意向后)。
console.log 显示我得到了正确的响应,但我的函数不会返回(submitme 仍然为 false,尽管它在回调中更改为 true)。因此,该函数始终返回 false。
我猜我的回调操作有问题,但我不确定我做错了什么。
我可能不在此处,但我认为回调还可以,它只是在脚本执行后执行(因此是异步的)。
但我的问题仍然存在,在这种情况下,如果布尔值仅通过 ajax 更改,我如何让表单提交为真?
这是我的 sn-p:
$(".form").submit(function(){
error = $("#error");
var submitme = false;
function ajaxCall(url, type, data, callback) {
$.ajax({
url: url,
type: type,
data: data,
success: function(response){
try {
obj = JSON.parse(response);
text = obj.Error;
error.html('');
error.append(text);
//if the json was parsed, return false
submitform = false;
}
catch (error) {
//if an error was thrown, return true
submitform = true;
}
callback(submitform);
},
});
}
function ajaxCallSuccess(submitform) {
console.log(submitform); //This shows correct output!
if (submitform == 'true'){ //Here I want to manipulate the global submitme variable so I can submit the form on "true"
submitme = true; //<-- this (I think) changes the global variable asynchronousy (so after the function is read), hence the outer function always returns false
}
};
ajaxCall(url, type, data, ajaxCallSuccess);
if (submitme == true) {
return true;
}
else {
return false;
}
});
编辑:
我编辑了这篇文章,也许可以稍微澄清一下这个问题
【问题讨论】:
-
控制台中“submitform”的输出是什么:console.log(submitform);
-
@Sunny 注意 ajax 调用中的 try 块,submitform 在成功解析
response(obj = JSON.parse(response)) 时返回false,在错误时返回true。 console.log 根据响应是否为 JSON 对象输出正确的布尔值,我似乎无法从ajaxCall函数中获取这些值。这决定了表单是否提交。 -
亲爱的朋友,错误是全局变量吗?
-
@FUserThrowError 我没有收到错误,只是不是我需要的输出。看看
function ajaxCallSuccess,我正在尝试从那里更改submitme变量,但没有成功。
标签: javascript jquery ajax