Ajax请求不是异步的(Ajax request are not async)
我有一个Ajax问题:
foreach(ids as id){ $.ajax({ url:'script.php', data:'id='+id, cache:false, }); }
如果我循环6次(在我的foreach循环中),我应该向服务器发出6个异步请求。 但在这种情况下,ajax调用是同步调用的,而不是异步的。 任何人都知道为什么会发生这种情况?
I have an ajax problem:
foreach(ids as id){ $.ajax({ url:'script.php', data:'id='+id, cache:false, }); }
If I loop 6 times (in my foreach loop) I should have 6 asynchronous requests being made to the server. But the ajax calls in this case are called synchronously, and not asynchronously. Any one have any idea why this happens?
原文:https://stackoverflow.com/questions/4900214
最满意答案
您可以使用
UNION
执行两个查询,其中一个查询直接在PNUM
上匹配GROUP <> 1
值,另一个匹配PNUM
并通过group_members
连接GROUP = 1
值。在第二部分中,您需要连接两次以使
users
获得与原始PNUM
匹配的组成员。由于
GROUP
条件各自相反,因此只有UNION
一部分会返回结果。/* First part of UNION directly matches PNUM for GROUP = 0 */ SELECT dloc FROM users WHERE PNUM = 23101 AND `group` <> 1 UNION /** Second part of UNION matches GROUP = 1 and joins through group_members back to users to get member dloc (from the second users join) */ SELECT uu.dloc FROM users u INNER JOIN group_members m ON u.`GROUP` = 1 AND u.id = m.group_id INNER JOIN users uu ON m.member_id = uu.id WHERE u.PNUM = 23101
不幸的是,这需要在查询中放置两次
PNUM
值,每个UNION
部分一次,但这并不是那么糟糕。它在这里 (使用MySQL而不是SQLite,但这并不重要)
使用
OR
和IN()
子查询的原始方法,也可以完成,但我为GROUP = 0
和GROUP = 1
添加了WHERE
条件。SELECT users.dloc FROM users WHERE users.id in ( SELECT group_members.member_id FROM group_members INNER JOIN users on users.id = group_members.group_id WHERE users.pnum='23101' AND `GROUP` = 1 ) OR users.id IN ( SELECT users.ID FROM users WHERE pnum='23101' AND `GROUP` = 0 );
You may use a
UNION
to execute both queries, one of which matches directly onPNUM
for values whereGROUP <> 1
and the other which matches onPNUM
and joins throughgroup_members
for values whereGROUP = 1
.In the second part, you need to join twice to
users
to get the members of the group matching the originalPNUM
.Since the
GROUP
condition is opposite in each, only one part of theUNION
will ever return results./* First part of UNION directly matches PNUM for GROUP = 0 */ SELECT dloc FROM users WHERE PNUM = 23101 AND `group` <> 1 UNION /** Second part of UNION matches GROUP = 1 and joins through group_members back to users to get member dloc (from the second users join) */ SELECT uu.dloc FROM users u INNER JOIN group_members m ON u.`GROUP` = 1 AND u.id = m.group_id INNER JOIN users uu ON m.member_id = uu.id WHERE u.PNUM = 23101
This does unfortunately require placing the
PNUM
value twice in the query, once perUNION
part, but that isn't so bad.Here it is in action (using MySQL rather than SQLite, but that doesn't really matter)
Using your original method with
OR
and anIN()
subquery, it can also be done, but I've addedWHERE
conditions forGROUP = 0
andGROUP = 1
.SELECT users.dloc FROM users WHERE users.id in ( SELECT group_members.member_id FROM group_members INNER JOIN users on users.id = group_members.group_id WHERE users.pnum='23101' AND `GROUP` = 1 ) OR users.id IN ( SELECT users.ID FROM users WHERE pnum='23101' AND `GROUP` = 0 );
相关问答
更多-
当你有这样的大型查询时,从头开始并将它们拼接在一起可能有助于将它们单独分解。 我首先得到每个projetos_mobile值的每个ucs_mobile行的计数。 您可以通过连接相关行上的两个表,并使用COUNT(DISTINCT um.id)来获取行数。 还有其他方法可以做到这一点,但这种特殊方法可以更好地扩展到查询的其余部分: SELECT pm.id, COALESCE(COUNT(DISTINCT um.id), 0) AS qty_uc FROM projetos_mobile pm LEFT JO ...
-
如果要返回A的所有记录和B中的任何匹配记录,那么左外连接是合适的: SELECT a.*, b.* FROM a, b WHERE a.id = b.id 这将返回A每条记录,并从B中填充匹配的值。 如果B中有多个匹配的行,这也会为A中出现的记录返回多行。 只是因为C中的外键引用了表A某些内容,除非您在查询中使用它,否则不会返回它。 如果您只想在外键出现在A时从B返回所有记录,那么您可能想要: SELECT * FROM B WHERE B.id in (SELECT id FROM A) AND B. ...
-
几个选项: 使用级联删除将一对多添加到父级,但使用延迟加载来降低性能损失。 使用Hibernate拦截器 (或AOP环境中的某个方面)来检测父记录删除并删除子项。 我个人会赞成第一种选择,因为它可以让您的数据模型更加真实地反映数据中的真实关系。 编辑:有第三个选项,但它不愉快 - 使用数据库触发器,并刷新您的Hibernate缓存(或使用非缓存会话)。 Couple of options: add the one-to-many to the parent with cascading delete, bu ...
-
MySql仅从子表中获取记录,其中父键具有多个值(MySql Get records only from child table where the parent key has multiple values)[2022-08-05]
一种方法是使用IN或EXISTS : SELECT c.* FROM child c WHERE c.parent_unique_id IN (SELECT p.unique_id FROM parent p); 当然,您可以在查询上单击SELECT DISTINCT 。 但是,这需要和不必要的处理。 One method is to use IN or EXISTS: SELECT c.* FROM child c WHERE c.parent_unique_id IN (SELECT p.uniq ... -
无论子记录是否存在,都返回父记录的SQL查询(SQL Query that returns parent records regardless if child records are present)[2022-04-27]
通常,在使用LEFT JOIN ,它们需要被链接 - 也就是说,所有连接都应该是外连接。 尝试这个: SELECT mem.FirtName, mem.LastName, m.Notes, m.Location, ai.Details, ai.CompleteByDate, c.Name FROM ((Meetings as m LEFT JOIN ActionItems as ai ON m.Id = ai.MeetingId Members ) LEFT JO ... -
编辑查询的新版本(最后链接到SQLFiddle): SELECT seqnno, narration, pairkey, scndleg FROM ( SELECT p.*, LEAST(seqnno, scndleg) related_leg_min_id FROM pairs p ) START WITH scndleg IS NOT NULL CONNECT BY pairkey = PRIOR seqnno AND scndleg IS N ...
-
您可以使用UNION执行两个查询,其中一个查询直接在PNUM上匹配GROUP <> 1值,另一个匹配PNUM并通过group_members连接GROUP = 1值。 在第二部分中,您需要连接两次以使users获得与原始PNUM匹配的组成员。 由于GROUP条件各自相反,因此只有UNION一部分会返回结果。 /* First part of UNION directly matches PNUM for GROUP = 0 */ SELECT dloc FROM users WHERE PNUM = ...
-
SQL Query以获取具有子记录列表的父表的记录(SQL Query to get records of parent table that have a list of child records)[2023-03-04]
这将返回所有[至少]一个孩子带有'fizz'foo并且[至少]一个孩子带有'buzz'foo的父记录。 我认为这是问题所要求的。 此外,虽然可能不是最优的,但是这个查询是通用的,因为它可以用于大多数SQL实现,而不仅仅是支持CTE,子查询和相关结构的更现代的查询。 SELECT DISTINCT Parent.ID FROM Parent JOIN Child C1 ON Parent.ID = C1.parent_Id JOIN Child C2 ON Parent.ID = ... -
在保存父记录之前检查是否存在匹配的子记录(Check if matching child records exist before saving parent records)[2023-11-20]
您正在寻找的是一个关系师 。 文章“ Divided We Stand:The Relational Division ”提供了使用SQL执行关系划分的各种技术的很好的总结。 对于您的情况,您需要“精确分部”下列出的技术: CREATE TABLE tableA ( Id int PRIMARY KEY, Name varchar(25), [Desc] varchar(255) ); INSERT INTO tableA (Id, Name, [Desc]) VALUES (1, 'S ... -
我认为命名令人困惑。 我宁愿拥有的是(每个第一个id是自动增量,忘记了如何在访问时这样说): // Product doesn't contain any information about quantity/price etc ... create table Products(product_id int, name text, description text ...); // Orders: create table Orders(order_id int, client_name text, d ...