1

jQueryを介してデータベースに新しいデータを追加するフォームがページにあります。正常に動作しますが、サーバーが機能しなくなり、500(内部サーバーエラー)が発生することがありますが、これはサーバーが機能しなくなったためです。

問題は、PHPがデータベースに追加した後にサーバーエラーが発生することがありますが、追加が行われたにもかかわらず、成功メッセージが表示される代わりにエラーが発生することです。では、エラーが発生した場合にPHPがデータを追加しないようにするには、どうすればよいでしょうか。

[はい、最終的には新しいサーバーに切り替えますが、完璧なサーバーはありません]

スクリプトは次のとおりです。

$.ajax({
  type: "POST",
  url: "/clase/do-add",
  data: $("#add").serialize(),
  dataType: "json",
  timeout: 8000,
  beforeSend: function() {
    var icon = '<p class="loading-add"></p>'; // loading icon
    $('form#add').append(icon);
  },
  success: function(data) {
    if (data.error == true) { // php returns error = true if name is invalid
      alert('Invalid name.');
      $('form#add').find('p').remove();
    } else {
      // make the addition
    }
  },
  error: function () { 
    $('form#add').find('p').remove();
    alert('Error. Try again.');
  }
});
4

2 に答える 2

0

関数でajax呼び出しをラップし、エラー時に関数を再度「要求」することができます。

何かがこれをリンクします:

jQuery.fn = function yourajaxfunction(){
    $.ajax({
      type: "POST",
      url: "/clase/do-add",
      data: $("#add").serialize(),
      dataType: "json",
      timeout: 8000,
      beforeSend: function() {
        var icon = '<p class="loading-add"></p>'; // loading icon
        $('form#add').append(icon);
      },
      success: function(data) {
        if (data.error == true) { // php returns error = true if name is invalid
          alert('Invalid name.');
          $('form#add').find('p').remove();
        } else {
          // make the addition
        }
      },
      error: function () { 
        $('form#add').find('p').remove();
        // ####### i added this:
        $(this).yourajaxfunction();
        alert('Error. Try again.');
      }
    });
}

または、エラー時に関数を再度実行する前に、数ミリ秒後に再度チェックするアイドル関数を使用できます。

$(this).idle().yourajaxfunction();

上記で使用されるアイドル関数:

jQuery.fn.idle = function(time){
    var o = $(this);
    o.queue(function(){
       setTimeout(function(){
          o.dequeue();
       }, time);
    });
    return o;
};

しかし、最善の方法は、サーバーを修正することです..これは、別の問題、つまり悪いサーバーを補うための単なるハックとパッチです. :)

そのため、運用シナリオには適していません。

于 2011-01-05T14:24:39.170 に答える
0

エラーが返された場合、データベースへの挿入のコントロールを作成できますか。

   ...
   error: function () { 
        var fError = function() {

             $('form#add').find('p').remove();
             alert('Error. Try again.');

            };

       $.ajax({
          type: "GET",
          url: "/clase/do-check",
          data: {id: id}, // id for check
          dataType: "json",
          success: function(data) {
            if (!data.ok)
               fError();
          },
          error: function () { 
               fError();
          }
        });              
   }
   ...
于 2011-01-05T14:33:17.550 に答える