Javascript 没有这个问题,因为这会强制约束i的当前值,而不是其未来值。这是一个小问题,但不是他遇到的最大问题。这是一个主要问题,因为他的div不匹配。这就是为什么它没有显示其中一个分区的原因,即使他修复了该分区,由于异步回调中如何处理i,也只会填充其中一个分区。另外,
Javascript 没有这个问题,因为这会强制约束i的当前值,而不是其未来值。这是一个小问题,但不是他遇到的最大问题。这是一个主要问题,因为他的div不匹配。这就是为什么它没有显示其中一个分区的原因,即使他修复了该分区,由于异步回调中如何处理i,也只会填充其中一个分区。另外,,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,没有这个问题,因为这会强制约束i的当前值,而不是其未来值。这是一个小问题,但不是他遇到的最大问题。这是一个主要问题,因为他的div不匹配。这就是为什么它没有显示其中一个分区的原因,即使他修复了该分区,由于异步回调中如何处理i,也只会填充其中一个分区。另外,在编写代码时,您的代码甚至无法正确地将查询从数组中拉出(因为数组索引当然从0开始)。是的,您同意查询需要从0开始。但我不确定你所说的异步i是什么意思。即使在您的解决方案中,它也始终保持同步。第一次成功时我将为零,第二次成功时我为一?否,因为在f
没有这个问题,因为这会强制约束
i
的当前值,而不是其未来值。这是一个小问题,但不是他遇到的最大问题。这是一个主要问题,因为他的div不匹配。这就是为什么它没有显示其中一个分区的原因,即使他修复了该分区,由于异步回调中如何处理i
,也只会填充其中一个分区。另外,在编写代码时,您的代码甚至无法正确地将查询从数组中拉出(因为数组索引当然从0开始)。是的,您同意查询需要从0开始。但我不确定你所说的异步i是什么意思。即使在您的解决方案中,它也始终保持同步。第一次成功时我将为零,第二次成功时我为一?否,因为在for
循环中,因为AJAX调用是异步的,所以i
在调用任何回调之前都将等于2。将i
绑定到函数参数的我的版本没有这个问题,因为这会强制绑定i
的当前值,不是它的未来价值。这不是OP问题的答案。这不是OP问题的答案。AJAX API永远不应该假设它知道将要使用它的页面布局。@Alnitak但他有两个确切的div,他想以平日的方式填充。此外,如果html是动态生成的,则可以将其作为json的一个元素返回。我不知道你为什么对答案投了否决票,我给出了,它只描述了一种可能的方法。如果您没有注意到,代码是从php返回的JSON对象,甚至可以自动生成,因此我并不真正理解您的反对意见。但是thx。否决票是因为这是一个糟糕的设计。如果API将在不使用相同ID的不同页面上使用,该怎么办?客户端JS的工作是决定填充哪个div,而不是服务器的工作。AJAX API永远不应该假设它知道将要使用它的页面布局。@Alnitak但他有两个确切的div,他想按常规填充。此外,如果html是动态生成的,则可以将其作为json的一个元素返回。我不知道你为什么对答案投了否决票,我给出了,它只描述了一种可能的方法。如果您没有注意到,代码是从php返回的JSON对象,甚至可以自动生成,因此我并不真正理解您的反对意见。但是thx。否决票是因为这是一个糟糕的设计。如果API将在不使用相同ID的不同页面上使用,该怎么办?客户端JS的工作是决定填充哪些div,而不是服务器的工作。谢谢!这是一个非常小的公司内部使用的网站,所以我不太担心暴露原始SQL接口。但是,我假设作为一个一般性的指导原则,这应该放在php脚本中?@Constantino是的,绝对不应该将SQL直接公开给web界面。有人可能会破坏您的页面并从表1发送DELETE*
@Constantino p.s.。虽然HTML5中允许使用完全数字的ID,但CSS3中不允许使用,因此您永远不能像这样在内容中添加特定于ID的样式。感谢所有提示。我已经将SQL迁移到php,并将ID调整为不完全是数字。谢谢!这是一个非常小的公司内部使用的网站,所以我不太担心暴露原始SQL接口。但是,我假设作为一个一般性的指导原则,这应该放在php脚本中?@Constantino是的,绝对不应该将SQL直接公开给web界面。有人可能会破坏您的页面并从表1发送DELETE*
@Constantino p.s.。虽然HTML5中允许使用完全数字的ID,但CSS3中不允许使用,因此您永远不能像这样在内容中添加特定于ID的样式。感谢所有提示。我已经将SQL移到php中,并将ID调整为不完全数字。不,不会-您没有引用查询
数组的正确元素。我可以向您保证它不会。您在这里编写的代码现在无法更好地访问查询[0]
,但是将当前查询和索引传递给callAjax
函数会更简洁,使该函数完全独立于外部范围中的查询
变量。一旦你做到了这一点,那么代码在语义上就等同于我的。每个基于的方法。是的,我同意,但在这种情况下,“查询”是在开发人员编写的范围内,因此,请尽力做到这一点。我确实同意您所做的是最好的方法,因为他正在使用jQuery。这是真的,但是通过将查询作为参数而不是使用作用域变量,使函数独立于查询
数组,从而使函数更有用。使用外部作用域变量有很好的时间和地点,但这不是其中之一。不,它不会-您没有引用查询
数组的正确元素。我可以向您保证它不会。您在这里编写的代码现在无法更好地访问查询[0]
,但是将当前查询和索引传递给callAjax
函数会更简洁,使该函数完全独立于外部范围中的查询
变量。一旦你做到了这一点,那么代码在语义上就等同于我的。每个基于的方法。是的,我同意,但在这种情况下,“查询”是在开发人员编写的范围内,因此,请尽力做到这一点。我确实同意您所做的是最好的方法,因为他正在使用jQuery。这是真的,但是通过将查询作为参数而不是使用作用域变量,使函数独立于查询
数组,从而使函数更有用。有很好的时间和地点使用外部范围变量,但这不是其中之一。
<div id="1"></div>
<div id="2"></div>
<script>
var queries = ["SELECT * from table1", "SELECT * from table2"]
for (var i = 0; i < queries.length; i++) {
$.ajax({
url: "querySQL.php",
type: "GET",
cache: false,
data: {query: queries[i]},
success: function(data) {
$("#" + i).html(data);
}
});
}
</script>
$.each(queries, function(i, query) {
$.ajax({
url: "querySQL.php",
type: "GET",
cache: false,
data: { query: query },
success: function(data) {
$("#" + (i + 1)).html(data); // NB: i starts at 0, not 1
}
});
});
i=1; i <= queries.length; i++
{firstResult:{divToUse: "#1", dataToFill: "#1 content"},
secondResult:{divToUse: "#2", dataToFill: "#2 content"},
....
}
var queries = ["SELECT * from table1", "SELECT * from table2"];
function callAjax(i){
$.ajax({
url: "querySQL.php",
type: "GET",
cache: false,
data: {query: queries[i]},
success: function(data) {
console.log(i)
$("#" + (i+1).html(data);
}
});
}
for (var i = 0; i < queries.length; i++) {
callAjax(i)
}