Проблема переменной области при возврате значения из $ .post - PullRequest
0 голосов
/ 25 октября 2011

У меня одна из тех неприятных проблем с областью действия переменной с $ .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 ]

1 голос
/ 25 октября 2011

Поскольку вы делаете асинхронный запрос, чтобы проверить, изменилось ли значение, вы всегда должны возвращать false из вашего обработчика отправки.В обратном вызове, если форма была отредактирована, вы бы вручную отправили форму, используя form.submit().Как то так:

getReturn(   
    function(return_value) {
        if (return_value) {
            $("#myForm").submit();
        }
    },    
    id,    
    old_variable);
return false;
1 голос
/ 25 октября 2011

Вы не понимаете асинхронное выполнение.Вы не можете вернуть что-либо из $ post!Не забудь этого.Все, что вы можете сделать, это запустить выполнение чего-либо - вы можете попробовать установить флаг переменной, но это вам не поможет.Вам также нужно инициировать выполнение функции, которая что-то делает с этим флагом, и вам нужно вызывать эту функцию из $ post.

Функция, которую вы отправляете в качестве обратного вызова, возвращает значение.Но это не возвращает значение в любом месте.Вы вызываете его внутри $ post, и он возвращает значение внутри $ post - что для вас совершенно бесполезно, поскольку вы ничего не делаете с возвращаемым значением.

Я бы сказал вам, как изменитьэто, за исключением того, что вы не сказали, что вы хотите сделать с этим возвращаемым значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...