首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用PHP为JQuery .ajax()返回正确的成功/错误消息?

如何使用PHP为JQuery .ajax()返回正确的成功/错误消息?
EN

Stack Overflow用户
提问于 2012-03-13 07:08:30
回答 8查看 230.1K关注 0票数 76

我一直收到错误警报。MYSQL部分没有任何问题,查询被执行,我可以在数据库中看到电子邮件地址。

客户端:

代码语言:javascript
复制
<script type="text/javascript">
  $(function() {
    $("form#subsribe_form").submit(function() {
      var email = $("#email").val();

      $.ajax({
        url: "subscribe.php",
        type: "POST",
        data: {email: email},
        dataType: "json",
        success: function() {
          alert("Thank you for subscribing!");
        },
        error: function() {
          alert("There was an error. Try again please!");
        }
      });
      return false;
    });
  });
</script>

服务器端:

代码语言:javascript
复制
<?php 
$user="username";
$password="password";
$database="database";

mysql_connect(localhost,$user,$password);
mysql_select_db($database) or die( "Unable to select database");

$senderEmail = isset( $_POST['email'] ) ? preg_replace( "/[^\.\-\_\@a-zA-Z0-9]/", "", $_POST['email'] ) : "";

if($senderEmail != "")
    $query = "INSERT INTO participants(col1 , col2) VALUES (CURDATE(),'".$senderEmail."')";
mysql_query($query);
mysql_close();

$response_array['status'] = 'success';    

echo json_encode($response_array);
?>
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-03-13 07:22:03

如果使用JSON dataType,则需要提供正确的内容类型。在回显json之前,放入正确的标头。

代码语言:javascript
复制
<?php    
    header('Content-type: application/json');
    echo json_encode($response_array);
?>

其他修复,您应该检查查询是否成功。

代码语言:javascript
复制
if(mysql_query($query)){
    $response_array['status'] = 'success';  
}else {
    $response_array['status'] = 'error';  
}

在客户端:

代码语言:javascript
复制
success: function(data) {
    if(data.status == 'success'){
        alert("Thank you for subscribing!");
    }else if(data.status == 'error'){
        alert("Error on query!");
    }
},

希望能有所帮助。

票数 128
EN

Stack Overflow用户

发布于 2012-03-13 07:23:33

只是想让你知道,你可以用它来调试。它对我帮助很大,现在仍然如此。

代码语言:javascript
复制
error:function(x,e) {
    if (x.status==0) {
        alert('You are offline!!\n Please Check Your Network.');
    } else if(x.status==404) {
        alert('Requested URL not found.');
    } else if(x.status==500) {
        alert('Internel Server Error.');
    } else if(e=='parsererror') {
        alert('Error.\nParsing JSON Request failed.');
    } else if(e=='timeout'){
        alert('Request Time out.');
    } else {
        alert('Unknow Error.\n'+x.responseText);
    }
}
票数 33
EN

Stack Overflow用户

发布于 2012-03-13 07:18:54

有些人推荐使用HTTP状态码,但我不喜欢这种做法。例如,如果你正在做一个搜索引擎,而提供的关键字没有结果,那么建议返回一个404错误。

然而,我认为这是错误的。HTTP状态码适用于实际浏览器<->服务器连接。关于连接的一切都进行得很完美。浏览器发出请求,服务器调用您的处理程序脚本。脚本返回'no row‘。其中没有任何内容表示“404page not found”-页面 found。

相反,我倾向于将HTTP层从服务器端操作的状态中分离出来。我总是返回一个封装了请求状态和请求结果的json数据结构,而不是简单地在JSON字符串中返回一些文本。

例如,在PHP中,您将拥有

代码语言:javascript
复制
$results = array(
   'error' => false,
   'error_msg' => 'Everything A-OK',
   'data' => array(....results of request here ...)
);
echo json_encode($results);

然后在您的客户端代码中,您将拥有

代码语言:javascript
复制
if (!data.error) {
   ... got data, do something with it ...
} else {
   ... invoke error handler ...
}
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9676084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档