我使用jquery进行编码。我的问题是$(document).ready(function()调用两个执行xhr请求的函数
<script type="text/javascript">
$(document).ready(function() {
getIdCategories();
getnameCategories();
});
</script>
有时候没有任何功能可行,有时功能有效,但它们不按顺序工作!!
拖曳功能:
function getIdCategories()
{
var request = new XMLHttpRequest();
request.open("GET","http://patisserie-orient.fr/prestashop/prestashop/api/categories?PHP_AUTH_USER="+PHP_AUTH_USER+"&ws_key="+ws_key,true);
request.onreadystatechange = function()
{
if(request.readyState==4)
{
//alert("Status is: "+request.status);
if (request.status == 200 || request.status == 0)
{
response = request.responseXML.documentElement;
i=0;
while(response.getElementsByTagName('category')[i]!=undefined)
{
idCategories[i]=response.getElementsByTagName('category')[i].getAttribute('id') ;
//alert(idCategories[i]);
i=i+1;
}
}
}
}
request.send();
}
和
function getnameCategories()
{
var request = new XMLHttpRequest();
if(i<idCategories.length)
{
request.open("GET","http://patisserie-orient.fr/prestashop/prestashop/api/categories/"+idCategories[i]+"?PHP_AUTH_USER="+PHP_AUTH_USER+"&ws_key="+ws_key,true);
request.onreadystatechange = function()
{
if(request.readyState==4)
{
//alert("Status2 is "+request.status);
if (request.status == 200 || request.status == 0)
{
response1 = request.responseXML.documentElement;
nameCategories[i] = response1.getElementsByTagName('language')[0].firstChild.data;
//alert(nameCategories[i]);
$('#im'+i).html(nameCategories[i]);
$('#a'+i).show();
i++;
}
}
}
request.send();
}
else
{
return;
}
}
答案 0 :(得分:2)
查看$.ajax
:http://api.jquery.com/jQuery.ajax/
这比原生方式容易得多。
AJAX意味着 异步 JavaScript和XML ,其中异步意味着脚本不会等到请求完成。这意味着您的两个请求同时开始,您无法知道哪一个更快。但是你可以从第一个请求开始回调函数中的第二个请求,所以第二个请求在第一个请求完成时开始。
$(function(){
$.ajax({
type: 'GET',
url: '',
data: {},
success:function(data){
console.log('First request done');
/* Start second request HERE */
}
});
});
$.ajax
还提供同步请求。对于同步请求,脚本会等待请求完成:
$(function(){
$.ajax({
type: 'GET',
url: '',
data: {},
async: false
});
console.log('First request done');
/*Start second request HERE */
});
答案 1 :(得分:1)
Ajax
来电只是async
请求,这意味着您无法控制先完成哪一个订单。但你仍然可以通过添加另一个callback
来解决它。
$(document).ready(function() {
getIdCategories(function(){
getnameCategories();
});
});
// in 'getIdCategories'
function getIdCategories(cb) {
if (/* ajax complete */) {
// fire callback function
cb && cb();
}
}
答案 2 :(得分:0)
jQuery的AJAX函数有一个名为async的参数,您可以将其设置为false以强制执行同步行为
$(function(){
$.ajax({
type: 'GET',
url: '',
async: false,
data: {},
success:function(data){
console.log('First request done');
/* Start second request HERE */
}
});
});
//调用另一个ajax函数
这应该允许你控制执行的顺序..除非第一次调用返回第二次不会启动