从$ .post返回值的可变范围问题

时间:2011-10-24 22:51:23

标签: javascript jquery ajax scope

我有一个与$ .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
);

2 个答案:

答案 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;