Ajax Success and Error function failure
我的jQueryAjax无法正常工作。它直接指向php页面来更新数据库,但对于success或error选项,它永远不会返回到脚本。
我的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | $(document).ready(function(){ $("form#updatejob").submit(function() { function textreplace(x) {return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");} // we want to store the values from the form input box, then send via ajax below var job = $("#job").attr("value"); var description = $("#description").val(); description.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"); var startDate = $("#startDate").attr("value"); var releaseDate = $("#releaseDate").attr("value"); var status = $("#status").attr("value"); $.ajax({ beforeSend:textreplace(description), type:"POST", url:"updatedjob.php", data:"jobID="+ job +"& description="+ description +"& startDate="+ startDate +"& releaseDate="+ releaseDate +"& status="+ status, success: function(){ $("form#updatejob").hide(function(){$("div.success").fadeIn();}); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert("Status:" + textStatus); alert("Error:" + errorThrown); } }); return false; }); }); |
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php include("connect.php"); $job = trim($_POST['job']); $startDate = trim($_POST['startDate']); $releaseDate = trim($_POST['releaseDate']); $mysqlstartdate = date('Y-m-d', strtotime($startDate)); $mysqlreleasedate = date('Y-m-d', strtotime($releaseDate)); $description = trim($_POST['description']); $status = trim($_POST['status']); $update ="UPDATE jobs SET startDate = '$mysqlstartdate', releaseDate = '$mysqlreleasedate', description = '$description', status = '$status' WHERE jobID = '$job'"; $rsUpdate = mysql_query($update); // or die(mysql_error()); mysql_close(); ?> |
试试这个:
1 2 3 4 5 6 7 8 9 10 11 12 | $.ajax({ beforeSend: function() { textreplace(description); }, type:"POST", url:"updatedjob.php", data:"jobID="+ job +"& description="+ description +"& startDate="+ startDate +"& releaseDate="+ releaseDate +"& status="+ status, success: function(){ $("form#updatejob").hide(function(){$("div.success").fadeIn();}); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert("Status:" + textStatus); alert("Error:" + errorThrown); } }); |
还可以使用以下方法来捕获错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 | $.ajax({ url: url, success: function (data) { // Handle success here $('#editor-content-container').html(data); $('#editor-container').modal('show'); }, cache: false }).fail(function (jqXHR, textStatus, error) { // Handle error here $('#editor-content-container').html(jqXHR.responseText); $('#editor-container').modal('show'); }); |
我也遇到了同样的问题,只需在Ajax调用中添加一个datatype="text"行就可以解决这个问题。使数据类型与您期望从服务器返回的响应匹配(您的"插入成功"或"出错"错误消息)。
您可以实现以下特定于错误的逻辑:
1 2 3 4 5 6 7 | error: function (XMLHttpRequest, textStatus, errorThrown) { if (textStatus == 'Unauthorized') { alert('custom message. Error: ' + errorThrown); } else { alert('custom message. Error: ' + errorThrown); } } |
这可能是一篇旧文章,但是我意识到PHP没有什么可以返回的,并且您的success函数没有如下输入:
您正在发送一个包含为get实现的数据的post类型。您的表格必须如下:
1 2 3 4 5 | $.ajax({ url: url, method:"POST", data: {data1:"data1",data2:"data2"}, ... |
这可能无法解决所有问题,但函数(文本)中使用的变量与传递的参数(x)不同。
改变:
1 2 3 | function textreplace(x) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"); } |
到:
1 2 3 | function textreplace(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"); } |
好像会有点好处。