2010-11-18 9 views
1

こんにちは私はデータを送信するajaxポスト関数を使用しています。返されたデータに基づいて、私はその決定を下すか、ユーザーがページにとどまって変更を加えることを許可するかのどちらかになります。 ajaxコールバックの戻りデータに基づいてフォームロードを停止する

 if (validateStep(step)) 
     { 
     if(step==1) 
     { 
      var data = document.getElementById('hiddenContact').value; 
      $.post('/app/controller/action', {'data':data}, function(returndata){if(returndata.match('not Unique'))alert('Contact source already exists'); else if(returndata.match('not posted')){alert("Not posted to the database");return false;}}); 
     } 
     step = step + 1; 
     form[0].action = '/app/controller/index/step:'+step; 
     document.getElementById('step').value = step; 
     form[0].submit(); 
     } 

は、ここで私は、戻りデータが「投稿されていません」にマッチングされたときに進めてアプリケーションを停止しようとしている、と私は警戒して、動作を停止する場合はfalseリターンを投げています。私は次のステップに行くからアプリケーションを停止することができません。 falseに戻されますが、操作は次のステップに進みますが、ステップを増やす最後の4行にコメントを付けると、アクションを設定して送信し、ページにとどまりアラートがスローされます。

誰かが私のプロセスを提出から中止するために何をすべきか知っていますか?

答えて

1

AJAX呼び出しは非同期です。あなたが戻ってきた「偽」は、あなたがそこに示したハンドラではなく、成功のコールバックにあります。したがって、AJAX呼び出しがサーバーに到達する前に、最後の4つのステップが常に実行されます。あなたはそうのように、これに対処するために、AJAXの応答コールバックを変更することで、この問題を解決することができます

if (validateStep(step)) 
{ 
    var next_step = function() { 
     step = step + 1; 
     form[0].action = '/app/controller/index/step:'+step; 
     document.getElementById('step').value = step; 
     form[0].submit(); 
    } 

    if(step==1) 
    { 
     var data = document.getElementById('hiddenContact').value; 
     $.post('/app/controller/action', { 'data':data }, function(returndata) { 
      if (returndata.match('not Unique')) alert('Contact source already exists'); 
      else if (returndata.match('not posted')) alert("Not posted to the database"); 
      else next_step(); 
     }); 
    } 
    else next_step(); 
} 
+0

こんにちはリーを、私は「投稿されていません」の場合の処理​​を停止しようとしています。だから私はnext_step関数を呼び出すと、それはとにかく提出部分を実行するだろうか? – macha

+0

@macha、 'next_step()'は送信プロセスを実行しますが、私がポストしたコードでは 'if'文の場合は' else'節にあることに注意してください。したがって、最初の2つの条件が一致する場合にのみポストされます。 reutrnが 'ユニークでない'場合は投稿しないこともしますか?投稿されたコードは、いずれかのエラー条件の下で、フォーム提出が防止されると想定していました。 –

+0

あなたは男の人です!どうもありがとう! – macha

0

あなたのプロセスは、あなたのIF文の外にある次のステップに進み、常に実行されます。

は、あなたがこれを行うことはできません。

if (validateStep(step)) 
    { 
     if(step==1) 
     { 
      var data = document.getElementById('hiddenContact').value; 
      $.post('/app/controller/action', {'data':data}, function(returndata){ 
       if(returndata.match('not Unique')) { 
        alert('Contact source already exists'); 

        step = step + 1; 
        form[0].action = '/app/controller/index/step:'+step; 
        document.getElementById('step').value = step; 
        form[0].submit(); 

       } else if (returndata.match('not posted')){ 
        alert("Not posted to the database"); 
        return false; 
       } 
      }); 
     } 
    } 
+0

これは、あなたが進めたくないときにfalse(これはもはや必要ではない)だけを返すことを前提としています。だから、「ユニークではない」という手続きが行われます。 –

関連する問題