【发布时间】:2012-10-12 01:43:27
【问题描述】:
我有一个带有特定动作的表格。提交表单后,我发送一个调用此操作的 ajax 调用。另一方面,我正在发送另一个 ajax 调用来更新进度。我做了如下:
$("form").submit(function() {
function callBack()
{
if( (this.readyState == 4) && (this.status == 200) )
{
console.log(this.responseText);
}
}
function updateProgress (){
asyncReq('/get_progress?progress='+progress, callBack);
}
function asyncReq(url, functionCallBack)
{
var request; //request must be a local var to avoid race condition
try
{ //for modern browsers
request = new XMLHttpRequest;
}
catch (err)
{// legacy IE
request = new ActiveXObject("Microsoft.XMLHTTP");
}
request.onreadystatechange = callBack;
request.open("GET", url, true);
request.send();
};
var progress = $("#progress").val();
asyncReq('/get_progress?progress='+progress, callBack);
setTimeout(updateProgress, 2000);
$(this).ajaxSubmit({async: true});
return false;
});
我在这里有 2 个异步 javascript 调用,一个用于提交表单,一个用于更新进度。当我打印出callBack 中的responseText 时,我只能看到0.0 和1.0。那是在调用 ajaxSubmit() 之前和完成之后的一个。我也想在中间获得所有进展的价值。据我了解,asyncReq 的第二次 ajax 调用仅在 ajaxSubmit 完成后调用。谁能告诉我在ajaxSubmit() 完成之前如何进行另一个完整的ajax 调用?
注意:
表单由文件字段和ajaxSubmit组成,解压、处理文件并在处理完每个文件后更新进度表。 get_progress 方法提取该表的进度值。我正在使用 jquery.form.js 通过 ajax 调用提交表单。
【问题讨论】:
-
当您使用 jQuery,而您手动创建 XMLHttpRequest/ActiveXObject 连接时?让 jQuery 处理这个问题。 api.jquery.com/category/ajax
-
是的,我尝试使用 $.getScript("/get_progress?progress="+progress),但我不知道为什么,但我一次只能发送一个 ajax 请求。 2 个 ajax 请求没有同时触发!
-
请检查我刚刚发布的答案是否对您有所帮助
-
不,这件事是不可能的。因为,我不能向单个服务器发送 2 个请求。我试图启动另一台服务器并将一个请求发送到另一台服务器,但我无法从第二台服务器将响应返回给第一个客户端。在 Rails 服务器中,它说 200 已完成,但在萤火虫控制台中轮询时给了我空的响应。因此,我正在考虑将任务发送给后台工作人员并通过轮询获得响应。那个,我还没有尝试过! :)
-
为什么不能向单个服务器发送 2 个请求?
标签: jquery ruby-on-rails forms