jquery ajax done函数未启动
我有一个非常简单的jQueryAjax调用(如下)。Ajax调用执行后,我可以在Firebug Net面板中看到服务器返回了200ok,并返回了一个字符串“OK”。但是,“完成”和“失败”功能不会启动!非常令人沮丧 (不会触发“之前”和“之后”警报。) 为了简单起见(作为一种调试技术),我已经将其剥离为最简单的框架,但处理程序仍然不会启动。我在这里看不到什么jquery ajax done函数未启动,jquery,Jquery,我有一个非常简单的jQueryAjax调用(如下)。Ajax调用执行后,我可以在Firebug Net面板中看到服务器返回了200ok,并返回了一个字符串“OK”。但是,“完成”和“失败”功能不会启动!非常令人沮丧 (不会触发“之前”和“之后”警报。) 为了简单起见(作为一种调试技术),我已经将其剥离为最简单的框架,但处理程序仍然不会启动。我在这里看不到什么 postUrl= "/mod/users/check_email/"; dataToPost= { email: "test@not.me
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");
您需要链接
done()
和fail()
函数,它们不是$中使用的选项对象的一部分。ajax
:
$.ajax({
type: "POST",
url : postUrl,
data: dataToPost
}).done(function() {
alert("Success.");
}).fail(function() {
alert("Sorry. Server unavailable. ");
});
另外,由于ajax是异步的,如果“after”警报出现在“success”警报之前,不要感到惊讶。
success
和error
回调可以这样使用。对于完成
和失败
,您需要执行以下操作:
$.ajax({
type: "POST",
url: postUrl,
data: dataToPost,
}).done(function() {
alert("Success.");
}).fail(function() {
alert("Sorry. Server unavailable. ");
});
或:
您还需要设置
数据类型:“json”
。当我将它设置为'string'
时遇到了这个问题,并且它没有启动done
方法。我有如下相同的设置:
$.ajax({
type: "POST",
url : postUrl,
data: dataToPost
}).done(function() {
alert("Success.");
})
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");
});
$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();
遇到了同样的问题:done函数无法启动。虽然以前我曾多次使用相同的设置使其工作,但我花了一段时间才弄清楚发生了什么。经过调整后,我发现它还取决于Ajax调用返回的数据类型。最初,我将ajax调用配置为返回一些HTML。“完成”功能不起作用。在我将它改回json(在Flask中使用jsonify)之后,它又可以工作了 异步的
如果请求应同步发送,则设置为false。默认为true。请注意,如果将此选项设置为false,则在收到响应之前,您的请求将阻止其他代码的执行
数据类型
期望从服务器返回的数据类型。默认情况下,如果未指定数据类型,jQuery将查看响应的MIME类型
删除数据类型:“json”
(如果存在)
添加异步:如果不存在,则为false
这样执行:
$.ajax({
type: "POST",
url : postUrl,
data: dataToPost
}).done(function() {
alert("Success.");
})
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");
});
$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();
addperson.php echo的JSON格式如下:
$.ajax({
type: "POST",
url : postUrl,
data: dataToPost
}).done(function() {
alert("Success.");
})
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");
});
$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();
ajax方法没有“完成”和“失败”选项。你在寻找的是成功和错误。@KevinB uwotmate@clockw0rk看到答案了吗非常感谢!!这就像一个冠军。我正在从旧的成功和错误示例切换到“完成”和“失败”。@misterrobinson-是的,这可能有点混乱,但新方法不是对象的一部分,因为它们更通用,可以用于任何延迟/承诺,如$.ajax函数返回的内容。还有always.always(function(){//code here})您可以使用它来停止诸如进度微调器之类的项目。这是一个完整的替代品。对于微调器的实际启动,需要返回Ajax设置并添加beforeSend:function(){//code here:start spinner}。