2011-10-24 11 views
0

私は、これらの厄介な可変スコープの問題の1つに$ .postを使用しています。フォームを送信する前に、まずユーザーがコンテンツを編集したかどうか確認します。ユーザーがいない場合はfalseを返します。

私はStackoverflow上でさまざまな例を見てきました。これを行う一般的な方法は、その関数内でコールバックを処理する関数とコールバック関数を作成することです。私の問題は、以下のgetReturnedを呼び出すと、コールバックが実装されないことです(フォームが送信され、アラートを試したのでこれを知っています)。 Btw、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

コールバック内でアラートをテストしていたとき、リターンステートメントの前にアラートがありましたか? @Arielは正しいようだが、コールバックはまだ呼び出されるはずです。 – Lycha

答えて

1

値が変更されたかどうかをテストするための非同期要求を行っているので、送信ハンドラから常にfalseを返す必要があります。コールバックで、フォームが編集された場合は、form.submit()を使用してフォームを手動で送信します。

1

あなたは非同期実行を理解していません。あなたはできません $ postから何かを返す!その事を忘れるな。あなたができることは何かの実行を引き起こすことです - 可変フラグを設定しようとすることはできますが、それはあなたを助けません。また、そのフラグを使って何かを行う関数の実行をトリガする必要があり、その関数を$ postの中から呼び出さなければなりません。

コールバックとして送信する関数は、値を返します。しかし、それは価値をどこにも返さない。 $ postの中で呼び出すと、$ postの中の値が返されます。戻り値で何もしていないので、何も役に立ちません。

あなたはこの戻り値で何をしたいのかを言っていないことを除いて、変更方法を教えてください。

+0

ありがとう@Ariel。 'old_variable == text_from_server'が真の場合、フォームを送信しないようにfalseを返したいと思います。 – ksindi

+0

あなたはすでにその時点でフォームを提出しました。そうでなければ 'text_from_server'はどのようにしていますか? – Ariel

関連する問題