我有一个与$ .post讨厌的变量范围问题。在提交表单之前,我想先检查用户是否编辑了内容。如果用户没有,我会返回false。
我在Stackoverflow上看了一堆不同的例子,一般的方法是在该函数内创建一个函数和一个回调函数来处理回调。我的问题是,当我在下面调用getReturned时,回调没有得到实现(知道这是因为表单被提交并且我已经尝试过警报)。顺便说一下,alert("No changes were made so text was not submitted.");
被成功调用。
我做错了什么?
function getReturn(callback, id, old_variable){
var return_value = "ERROR";
$.post('myURL', {"id" : id},
function(data) {
var text_from_server = $.trim(data[0].note_text);
if (old_variable == text_from_server){
alert("No changes were made so text was not submitted.");
return_value = false;
callback(return_value);
} else {
return_value = true;
callback(return_value);
}
},
"json"
);
};
var id = 123;
var old_variable = "foo";
getReturn(
function(return_value){return return_value;/*alert("SUCCESS!");*/},
id,
old_variable
);
答案 0 :(得分:1)
您不了解异步执行。你不能从$ post返回任何内容!别忘了。您所能做的就是触发某些事情的执行 - 您可以尝试设置变量标志,但它对您没有帮助。你还需要触发执行一个带有该标志的函数,你必须从$ post内部调用该函数。
您在回调时发送的函数返回一个值。但它并没有将价值归还给任何地方。你在$ post中调用它,并且它返回$ post中的值 - 这对你没有任何用处,因为你没有对返回值做任何事情。
我会告诉你如何更改它,除非你没有说明你想用这个返回值做什么。
答案 1 :(得分:1)
由于您正在进行异步请求以测试值是否已更改,因此您必须始终从提交处理程序返回false。在回调中,如果表单已编辑,则您将使用form.submit()
手动提交表单。像这样:
getReturn(
function(return_value) {
if (return_value) {
$("#myForm").submit();
}
},
id,
old_variable);
return false;