我正在为一些大型查询制作一个脚本,并避免在php端超时,加上给用户一些输入,我试图在jquery上做大部分。
所以它的工作原理是这样的:首先,用户在一个select上选择一条记录。当他单击按钮时,我接到一个ajax调用,从json格式的记录中获取所需的详细信息。
通过响应,我得到了一个循环,对第一次调用的每个结果进行ajax调用。
如果我将async设置为false,它会工作,但是浏览器会死机,因为有几个ajax调用。那么有没有办法在关闭async的情况下更新用户界面呢?
我的意思是,当我在一个循环中进行ajax调用时,我需要将async设置为off,这对我来说没有任何意义。它可以同时进行几个调用,我对此没意见,但是为什么它不获取循环中的当前索引,除非我将async设置为false?它一直使用第一个索引。
$("#button_copy").live('click', function(){
$('#button_copy').attr("disabled", true);
id = $('#select').val();
$.ajax({
type: "POST",
url: "query1.php",
dataType: 'json',
async:false,
cache: false,
data: 'id=' + id,
success: function( data ) {
var total1 = data['records'].length;
$("#console").append('Total query 1: ' + total1 + '<br />');
for (var i in data['records']) {
$.ajax({
type: "POST",
url: "query2.php",
dataType: 'json',
async:false,
cache: false,
data: 'id=' + data['records'][i].id,
success: function( data2 ) {
var total2 = data2['records2'].length;
$("#console").append('Total of query 2 from ' + data['records'][i].person + ': ' + total2 + '<br />');
},
error: function(data2) {
console.log(data2);
}
});
var percentprogress1 = (i / total1) * 10000;
$('#progressbar1').css('width',percentprogress1 + '%');
}
},
error: function(data) {
console.log(data);
}
});
});
我自己也遇到了类似的问题。我在while循环中运行了一系列ajax请求。有些调用没有被发出!这要了我的命!!我的结论是我的浏览器——谷歌Chrome——忽略了“重复”请求。
看看这段伪代码:
while (i < ajaxCallArray.length) {
currentAjaxObject = ajaxCallArray[i];
ajaxPost = $.post(currentAjaxObject.url, function(data) {
//response data needs to go into a function such that each request gets its own "data" variable created.otherwise it just overwrites data!!
processAjaxResponse(data, currentAjaxObject);
},"json");
i++;
}
如果阿贾克斯呼叫阵列[0].url =“http://www.google.com”
,阿贾克斯呼叫阵列[1].url =“http://www.google.com”
,而阿贾克斯呼叫阵列[2].url=“http://www.google.com”
,浏览器实际上只会进行1次调用!!
解决方案:您必须执行类似于ajaxCallArray[0]的操作。url=“http://www.google.com?count=0“
,ajaxCallArray[1]。url=”http://www.google.com?count=0“
和ajaxCallArray[2]。url=”http://www.google.com?count=0“
即使您不使用这些url参数,也只需将它们区分开来。这样,浏览器将处理所有调用,即使它们立即完成。
希望这有帮助!!
您会遇到问题,因为您试图在回调中使用< code>i,但是当回调被调用时,< code>i不再具有其原始值。您也不应该将< code >用于...in on array -仅在对象上。
我建议不要使用任何类型的 for
循环,而是在完成前一个 AJAX 调用时触发每个连续的 AJAX 调用:
$.ajax(...).done(function(data) {
var all = data.records;
(function next() {
var record = all.shift();
if (record) {
$.post(...).done(next, function(res) {
// process inner result
// update UI, etc
...
});
}
})(); // invoke immediately
});
注意,我在两个AJAX调用中使用了“deferred”语法,而不是传递success:
处理程序。
在“伪递归”循环中,注意到我使用了。完成(next,…)
,它允许循环与当前调用结果的处理并行启动下一个AJAX调用。
我在ajax上卡住了,我有第一个选择框,这列出了所有国家的发送者,我也有第二个选择框,这也列出了国家的接收者。我使用ajax追加国家,但现在的问题是,第二个选择框没有填充。 我用php函数调用国家 我的路线 现在我的ajax 我的选择框如下所示 对于发件人: 那么对于接收方: 现在只有发送方的选择框总是被填充,而接收方不会。请告诉我如何使用AJAX填充两个选择框。 null
问题内容: 我正在使用以下代码通过AJAX提交表单: 背景 我的PHP处理程序执行各种任务,然后发回响应。然后,我可以在成功或错误函数中执行某些操作。 我的问题 当用户双击表单的“提交”按钮时,将发生两次AJAX调用,这将导致我的PHP处理程序中的代码执行两次。 我的问题 如果用户双击提交,如何避免我的代码执行两次? 问题答案: 当AJAX调用再次出现时,请先禁用首次单击的“提交”按钮,然后重新启
问题内容: 当图表第一次使用初始默认Ajax答复加载时,它可以正常工作。如果我添加console.log(chart_data),我会看到默认数据,然后在提交后我会看到新数据。唯一的问题是图表不会再次绘制。我知道drawChart函数不会第二次运行,我只是不知道为什么。我假设是的话,图表将重绘。抱歉,答案很明显。我对jQuery / Ajax非常陌生。 任何帮助,将不胜感激。谢谢! 问题答案: 您
问题内容: 我有一个php脚本,只生成到客户端的日志。 当我回声时,我希望将其即时传输到客户端。 (因为在处理脚本时,页面为空白) 我已经使用和玩过了,但是它们没有用。 最好的解决方案是什么? PS:在通话结束时冲水有点脏… 编辑:答案都行不通,PHP还是Apache错误? 问题答案: 编辑: 我在阅读手册页上的评论时遇到一个错误,该错误指出 不能正常工作 ,以下是解决方法: 如果这不起作用,那么
问题内容: 我有以下UPDATE语句: 在此示例中,该函数每行被调用三次,这是错误的-我希望该函数的每行仅被调用一次。 我正在使用PostgreSQL 8.4数据库。如何编写正确的更新? 我已经尝试过这样的事情: 但这没有用,因为整个更新语句仅被调用了 一次 。 问题答案: 您是否尝试过Postgres的非标准条款?我想这会起作用 请注意,我强制在子选择内每个记录仅被调用一次。然后,我将自我加入并
问题内容: 我想在我的页面上有一个链接(是否有更好的选择?),单击该链接将发出Ajax请求。(单击链接后,我想更新数据库中的字段。) 实现此目的的最简单方法是什么? 你能推荐我一些教程吗? 问题答案: 真的很简单。在您看来,有这样的链接/按钮。重要的一点是 :remote = > true 要么 显然,您必须获取update_thingy_path才能正常解决某些问题。区别在于渲染时将渲染 .js