Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery ajax done函数未启动_Jquery - Fatal编程技术网

jquery ajax done函数未启动

jquery ajax done函数未启动,jquery,Jquery,我有一个非常简单的jQueryAjax调用(如下)。Ajax调用执行后,我可以在Firebug Net面板中看到服务器返回了200ok,并返回了一个字符串“OK”。但是,“完成”和“失败”功能不会启动!非常令人沮丧 (不会触发“之前”和“之后”警报。) 为了简单起见(作为一种调试技术),我已经将其剥离为最简单的框架,但处理程序仍然不会启动。我在这里看不到什么 postUrl= "/mod/users/check_email/"; dataToPost= { email: "test@not.me

我有一个非常简单的jQueryAjax调用(如下)。Ajax调用执行后,我可以在Firebug Net面板中看到服务器返回了200ok,并返回了一个字符串“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");

您需要链接
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}。