jQuery:处理内部服务器错误响应

时间:2011-01-05 14:09:02

标签: php jquery internal-server-error

我在页面上有一个表单,通过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.');
  }
});

2 个答案:

答案 0 :(得分: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;
};

但最好的办法是修复服务器..这些东西只是黑客和补丁,可以弥补另一个问题:糟糕的服务器。 :)

因此,对于任何生产场景都不是一个好主意。

答案 1 :(得分: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();
          }
        });              
   }
   ...