关于jquery:Ajax成功和错误功能失败

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);
    }      
});

beforeSend属性设置为function() { textreplace(description); }而不是textreplace(description)beforeSend属性需要一个函数。


还可以使用以下方法来捕获错误:

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函数没有如下输入:success:function(e){}。希望这对你有帮助。


您正在发送一个包含为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,"\\$&");
}

好像会有点好处。