我有一个非常简单的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");
答案 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)
success
和error
个回调。对于done
和fail
,您需要执行以下操作:
$.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();