我一直收到错误警报。MYSQL部分没有任何问题,查询被执行,我可以在数据库中看到电子邮件地址。
客户端:
<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>
服务器端:
<?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);
?>
发布于 2012-03-13 07:22:03
如果使用JSON dataType,则需要提供正确的内容类型。在回显json之前,放入正确的标头。
<?php
header('Content-type: application/json');
echo json_encode($response_array);
?>
其他修复,您应该检查查询是否成功。
if(mysql_query($query)){
$response_array['status'] = 'success';
}else {
$response_array['status'] = 'error';
}
在客户端:
success: function(data) {
if(data.status == 'success'){
alert("Thank you for subscribing!");
}else if(data.status == 'error'){
alert("Error on query!");
}
},
希望能有所帮助。
发布于 2012-03-13 07:23:33
只是想让你知道,你可以用它来调试。它对我帮助很大,现在仍然如此。
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);
}
}
发布于 2012-03-13 07:18:54
有些人推荐使用HTTP状态码,但我不喜欢这种做法。例如,如果你正在做一个搜索引擎,而提供的关键字没有结果,那么建议返回一个404错误。
然而,我认为这是错误的。HTTP状态码适用于实际浏览器<->服务器连接。关于连接的一切都进行得很完美。浏览器发出请求,服务器调用您的处理程序脚本。脚本返回'no row‘。其中没有任何内容表示“404page not found”-页面是 found。
相反,我倾向于将HTTP层从服务器端操作的状态中分离出来。我总是返回一个封装了请求状态和请求结果的json数据结构,而不是简单地在JSON字符串中返回一些文本。
例如,在PHP中,您将拥有
$results = array(
'error' => false,
'error_msg' => 'Everything A-OK',
'data' => array(....results of request here ...)
);
echo json_encode($results);
然后在您的客户端代码中,您将拥有
if (!data.error) {
... got data, do something with it ...
} else {
... invoke error handler ...
}
https://stackoverflow.com/questions/9676084
复制相似问题