如何使用jquery的$ .ajax错误参数

时间:2011-07-28 07:16:25

标签: php javascript jquery

如何使用jquery的$ .ajax的错误参数?假设我有一个表单,然后当我提交它时,数据将使用在<,p>中使用的PHP脚本保存到表中。

   $.ajax({
      type: "POST",
      url: "classes/ajax.submitcv.php",
      data: "userid="+userid+"&resumetitle="+resumetitle+"&resumeintro="+resumeintro+
            "&name="+name+"&dob="+dob+"&contacttel1="+contacttel1+"&contacttel1type="+contacttel1type+
            "&contacttel2="+contacttel2+"&contacttel2type="+contacttel2type+"&contacttel3="+contacttel3+
            "&contacttel3type="+contacttel3type+"&primaryemail="+primaryemail+"&secondaryemail="+secondaryemail+
            "&skype="+skype+"&facebook="+facebook+"&linkedin="+linkedin+"&twitter="+twitter+
            "&messenger="+messenger+"&yahoo="+yahoo+"&aol="+aol+"&summaryofpositionsought="+
            summaryofpositionsought+"&summaryofskills="+summaryofskills+"&gender="+gender,
      success: function(){
        $('form#wsrecruitcvhead').fadeOut("normal",function(){
           $('div.success').fadeIn(1000);
        });
      },
      });
      return false;
   });
 });

根据上面的代码,如果数据通过数据库表,表单消失,标签内的成功消息显示,那么我将如何输出错误消息,让我说我有一个PHP函数和要插入的数据返回false,如何更新html文件给出的消息和表单不会fadeOut?简而言之..如何使用$ .ajax的错误参数?

4 个答案:

答案 0 :(得分:1)

error()函数用于在请求失败时调用函数。我们假设您的请求不会失败(在HTTP意义上;也就是说,请求可以返回错误而不会失败)。您需要做的是让ajax.submitcv.php打印出某种文本,指示数据是否已成功保存。然后,在success()函数中,您可以执行以下操作:

success: function(data) {
   if (data === 'success') {
       // code for success
   }
   else if (data === 'failure') {
       // code for failure
   }
}

我建议将结果作为JSON发回。类似的东西:

  

{“回复”:“成功”}

success: function(data) {
   var returned = $.parseJSON(data);

   if (returned.response === 'success') {
       // code for success
   }
   else if (returned.response === 'failure') {
       // code for failure
   }
}

顺便说一句,我很一般。实际的生产代码应该检查空值和其他东西(并且在请求失败时有一个错误处理程序)。

答案 1 :(得分:1)

如果要使用$ .ajax的错误参数,则需要从php页面发送带有错误代码的HTTP状态标头(在任何其他输出之前!)。例如:

if(some_function(...) === FALSE)
{
   header("HTTP/1.0 403 Forbidden");
   exit;
}

答案 2 :(得分:0)

为了让您从ajax调用中处理应用程序中的某种错误,您需要将此类错误发送到您的页面。我自己在ajax的情况下通常返回一个json,其中包含状态和消息等。 让我举个例子说明我会做什么: 我首先会像以下一样返回一个json: 成功案例:

{"status":"OK", "message":"The data saved!", "data":[some kind of data]}

错误情况:

{"status":"ERROR", "message":"Could NOT save DATA!", "data":[some kind of data]}

然后在处理程序中:

 $.getJSON("myAjaxUrl",  function(response) {
       if(response.status=='ERROR') {
          //handle the error and maybe alert the message
          alert(response.message);
       } else {
          //do whatever. Everything went ok, maybe alert a message if any
          alert(repsonse.message);
       }
    )};

之前的优点是您可以添加aditional状态。

使用之前的版本,您可以处理所谓的Business errosr,即应用程序中的错误。也许你还想处理一个错误,因为我们说应用程序失败了,而ajax无法访问url。 对于最后一种情况,您需要一个用于ajax调用的错误处理程序。您需要执行以下操作:

$.getJSON("myAjaxUrl",  function(response) {
       if(response.status=='ERROR') {
          //handle the error and maybe alert the message
          alert(response.message);
       } else {
          //do whatever. Everything went ok
       }
    )}
    .error(function() { alert("Fatel Error!!"); });

您可以查看此here

的文档

答案 3 :(得分:0)

详细说明@John Kurlak发布的内容,error()参数不用于“表单错误”。请求失败时调用它。他给你回复“成功”或“失败”的建议是你处理表单验证的方式。

以下是如何处理实际请求错误的示例...

function ajax_error(request, type, errorThrown)
{
    var message = "There was an error with the AJAX request.\n";
    switch (type) {
        case 'timeout':
            message += "The request timed out.";
            break;
        case 'notmodified':
            message += "The request was not modified but was not retrieved from the cache.";
            break;
        case 'parseerror':
            message += "XML/Json format is bad.";
            break;
        default:
            message += "HTTP Error (" + request.status + " " + request.statusText + ").";
    }
    message += "\n";
    alert(message);
}

然后从ajax调用的错误()参数中调用ajax_error ......

$.ajax({
    type: "POST",
    url: "classes/ajax.submitcv.php",
    data: "userid="+userid+"&resumetitle="+resumetitle+"&resumeintro="+resumeintro+
    "&name="+name+"&dob="+dob+"&contacttel1="+contacttel1+"&contacttel1type="+contacttel1type+
    "&contacttel2="+contacttel2+"&contacttel2type="+contacttel2type+"&contacttel3="+contacttel3+
    "&contacttel3type="+contacttel3type+"&primaryemail="+primaryemail+"&secondaryemail="+secondaryemail+
    "&skype="+skype+"&facebook="+facebook+"&linkedin="+linkedin+"&twitter="+twitter+
    "&messenger="+messenger+"&yahoo="+yahoo+"&aol="+aol+"&summaryofpositionsought="+
    summaryofpositionsought+"&summaryofskills="+summaryofskills+"&gender="+gender,
    success: function(){
        $('form#wsrecruitcvhead').fadeOut("normal",function(){
            $('div.success').fadeIn(1000);
        });
    },
    error: ajax_error
});