jquery ajax完成函数没有触发

时间:2013-05-24 21:45:31

标签: jquery

我有一个非常简单的jQuery Ajax调用(下面)。 Ajax调用执行,我可以在Firebug Net面板中看到服务器返回200 OK并返回一个字符串“OK”,因为它应该。但是,完成和失败功能不会触发!很沮丧!

(警告之前的“之前”和“之后”警告。)

为了简单起见(以及作为一种调试技术),我已将其剥离为最裸露的骨架,但处理程序仍无法触发。我在这里看不到什么?

postUrl= "/mod/users/check_email/";
dataToPost= { email: "test@not.me" };

alert("before");
$.ajax
({
    type: "POST", 
    url: postUrl,
    data: dataToPost,
    done: function() 
    {
        alert("Success.");
    },
    fail: function() 
    {
        alert("Sorry. Server unavailable. ");
    },
});  // end Ajax call 

alert("after");

5 个答案:

答案 0 :(得分:49)

您需要链接done()fail()函数,它们不是$.ajax中使用的选项对象的一部分:

$.ajax({
    type: "POST", 
    url : postUrl,
    data: dataToPost
}).done(function()  {
    alert("Success.");
}).fail(function()  {
    alert("Sorry. Server unavailable. ");
}); 

此外,由于ajax是异步的,如果“after”警报出现在“成功”警报之前,请不要惊讶。

答案 1 :(得分:14)

可以通过这种方式使用

successerror个回调。对于donefail,您需要执行以下操作:

$.ajax({
    type: "POST", 
    url: postUrl,
    data: dataToPost,
}).done(function() {
    alert("Success.");
}).fail(function() {
    alert("Sorry. Server unavailable. ");
});

或者:

$.ajax({
    type: "POST", 
    url: postUrl,
    data: dataToPost,
    success: function() {
            //code here
    }
});

答案 2 :(得分:9)

您还需要设置dataType: 'json'。当我将其设置为'string'并且它没有触发done方法时,我遇到了这个问题。

答案 3 :(得分:6)

我有这样的设置:

$.ajax({
    type: "POST", 
    url : postUrl,
    data: dataToPost
}).done(function()  {
    alert("Success.");
})

并遇到了同样的问题:完成功能无法启动。虽然我在设置之前已经成功地使它工作了很多次,但我花了一些时间来弄清楚发生了什么。经过调整后,我发现它还取决于Ajax调用返回的数据类型。最初,我配置了ajax调用以返回一些HTML。完成的功能不起作用。在我将其更改回json(在Flask中使用jsonify)后,它再次起作用。

答案 4 :(得分:0)

异步 如果请求应同步发送,则设置为false。默认为true。请注意,如果将此选项设置为false,则您的请求将阻止其他代码的执行,直到收到响应为止。

数据类型 您期望从服务器返回的数据类型。默认情况下,如果未指定dataType,则jQuery将查看响应的MIME类型。

删除 dataType: 'json'(如果存在)。

添加 async:false(如果不存在)。

执行如下:

var username=$("#username").val();
var password=$("#password").val();
$.ajax({
    url: "addperson.php",
    type: "POST", 
    async: false,
    data: {
        username: username,
        password: password
    }
})
.done (function(data, textStatus, jqXHR) { 
   var obj = JSON.parse(data);
   //Handle the response data here
    alert(obj.success); 
})
.fail (function(jqXHR, textStatus, errorThrown) { 
    alert("Error"); 
})
.always (function(jqXHROrData, textStatus, jqXHROrErrorThrown) { 
    alert("complete"); 
});

addperson.php以JSON格式显示,如下所示:

$username1 = isset($_POST["username"]) ? $_POST["username"] : '';
    
$password1 = isset($_POST["password"]) ? $_POST["password"] : '';

$servername = "xxxxx";
$username = "xxxxx";
$password = "xxxxx";
$dbname = "xxxxx";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO user (username, password)
VALUES ('$username1', '$password1' )";

    ;  
    
    
   

if ($conn->query($sql) === TRUE) {
    
   echo json_encode(array('success' => 1));
} else{
    
    
  echo json_encode(array('success' => 0));
}





$conn->close();