我注意到在.each()循环中的jQuery中使用AJAX时遇到问题。执行脚本时,仅更新数据库中的第一条记录。
这是我的脚本:
function save(){
var _userTypeId;
var _userTypeName;
var _isDeleted;
var request;
$("tr.recUserType").each(function(){
$this = $(this);
_userTypeId = $this.find("#userTypeId").html();
_userTypeName = $this.find("#userTypeName").val();
_isDeleted = $this.find("#isDeleted").val();
request = $.ajax({
url: "save.php",
type: "POST",
data: {userTypeId: _userTypeId, userTypeName: _userTypeName, isDeleted: _isDeleted}
});
});
request.done(function(){
document.location.reload();
});
request.fail(function(){
alert("Request Failed!");
});
}
以及save.php的内容:
<?php
include_once "globals.php";
dbConnect();
$isExisting = mysql_query("SELECT COUNT(userTypeId) AS userCount FROM userType WHERE userTypeId='".$_POST['userTypeId']."';");
$result = mysql_fetch_array($isExisting);
//original: if(!$result['userCount'] = 0) <-- This was a logical error
if($result['userCount'] != 0)
mysql_query("UPDATE userType SET userTypeName='".$_POST['userTypeName']."', isDeleted='".$_POST['isDeleted']."' WHERE userTypeId='".$_POST['userTypeId']."';");
else
mysql_query("INSERT INTO userType VALUES('', '".$_POST['userTypeName']."', '".$_POST['isDeleted']."');");
echo mysql_error();
dbClose();
?>
我已经读过我可以选择使用同步而不是异步,但是我也读过,这不是一个好习惯。
那么,我实际上如何异步完成此工作并解决问题?
jQuery的$ .ajax()返回jQuery XMLHttpRequest对象(“ jqXHR”)。您正在将该对象存储到“ response”变量中。
您的问题是范围。您将所有 N 个jqXHR
存储到同一“请求”变量中。在循环结束时,“请求”仅指向最后一个jqXHR,因此,仅在您的LAST请求完成时才调用.done()。
正如Karl Anderson指出的那样,您应该将所有jqXHR存储到一个数组中,一旦所有[qqXHR]完成后,就执行一个回调。
var XHRs = [];
// ...
$("tr.recUserType").each(function() {
$this = $(this);
_userTypeId = $this.find("#userTypeId").html();
_userTypeName = $this.find("#userTypeName").val();
_isDeleted = $this.find("#isDeleted").val();
XHRs.push($.ajax({
url: "save.php",
type: "POST",
data: {userTypeId: _userTypeId, userTypeName: _userTypeName, isDeleted: _isDeleted}
}));
});
$.when(XHRs).then(function() {
document.location.reload();
});
另外,避免使用$ .ajax()的“ async:false”的诱惑。浏览器将被迫挂起,直到请求完成为止,这很糟糕。您几乎总是可以异步完成$
.ajax()调用。它可能需要一些技巧,但肯定会更好。
我是java8的新手。我试图理解Streams中foreach循环的工作原理。我的代码如下:- 问题是,当我只是传递消费者的引用而不是调用其中的consumer.accept时,Foreach循环如何知道调用consumer.accept(T t)。尽管,当我们为函数接口提供一些lambda表达式时,我们需要调用它的抽象方法,但我们只是没有在这里调用它。那么,Foreach循环如何知道它应该如何处
本文向大家介绍Python跑循环时内存泄露的解决方法,包括了Python跑循环时内存泄露的解决方法的使用技巧和注意事项,需要的朋友参考一下 Python跑循环时内存泄露 今天在用Tensorflow跑回归做测试时,仅仅需要循环四千多次 (补充说一句,我在个人PC上跑的)。运行以后,我就吃饭去了。等我回来后,Console窗口直接亮红了!!! 此处忘了截图 ,反正就是说Keras出现了什么什么错误。
本文向大家介绍详解Spring Bean的循环依赖解决方案,包括了详解Spring Bean的循环依赖解决方案的使用技巧和注意事项,需要的朋友参考一下 如果使用构造函数注入,则可能会创建一个无法解析的循环依赖场景。 什么是循环依赖 循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图: 注意,这里不是函数的循环调用,
我试图理解数组加法CoderByte问题的解决方案中的逻辑。这是问题提示——“使用JavaScript语言,让函数ArrayAdditionI(arr)获取存储在arr中的数字数组并返回字符串true,如果数组中的任何数字组合可以加到等于数组中的最大数字,否则返回字符串false。例如:如果arr包含[4, 6, 23, 10, 1, 3],则输出应该返回true,因为4 6 10 3 = 23。
问题内容: 我正在尝试将此for循环重写为for每个循环。 这就是我尝试过的 谁能指出我正确的方向?谢谢。 问题答案: 我认为您想得太多… :)
问题内容: 我只是继承了一些使我感到不安的代码:有一个测试库,其中充满了与我们网站上的网页相对应的类,并且每个网页类都有使该页面上的功能自动化的方法。 有一些方法可以单击页面之间的链接,这将返回链接页面的类。这是一个简化的示例: 文件homePageLib.py: 文件calendarLib.py: 然后,这允许脚本文件单击页面,并从该方法获取对象作为返回值,这意味着脚本作者在站点中导航时不必继续