Javascript 我将ajax设置为async:false,但不起作用
我正在尝试从其他域获取json,我的代码如下:Javascript 我将ajax设置为async:false,但不起作用,javascript,jquery,ajax,jsonp,Javascript,Jquery,Ajax,Jsonp,我正在尝试从其他域获取json,我的代码如下: var token = ''; function getData(){ console.log("get data suc"); for (var i=0; i < urls.length; i++){ var code = 'http://example.com/api/'+ urls[i]; $.ajax({ async: false, url: code, type:
var token = '';
function getData(){
console.log("get data suc");
for (var i=0; i < urls.length; i++){
var code = 'http://example.com/api/'+ urls[i];
$.ajax({
async: false,
url: code,
type: 'GET',
dataType: 'jsonp',
success: function(data) { showData(data); },
error: function() { console.log('ajax Failed!'); },
beforeSend: setHeader,
});
}
}
function showData(data){
$("<tr></tr>").append("<td>" + data + "</td>")
.appendTo("#results");
console.log(data);
}
function setHeader(xhr) {
xhr.setRequestHeader('Authorization', token);
}
var-token='';
函数getData(){
log(“获取数据suc”);
对于(var i=0;i
这个结果应该按照我从数组URL中给出的键的顺序显示。
例如:URL=[1,2,3,4]→应该得到[一,二,三,四]
但我总是点错菜!(例:[二,一,三,四]或[三,四,二,一])
怎么搞的?
“async:false”不起作用吗?为什么?您使用的是一个不支持
async:false
的jsonp
请求
默认情况下,所有请求都是异步发送的(即设置为
默认情况下为true)。如果需要同步请求,请将此选项设置为
错。跨域请求和数据类型:“jsonp”请求不会
支持同步操作。请注意,同步请求可能会
暂时锁定浏览器,禁用请求时的任何操作
它是活动的
所以试试看
function getData() {
function request(urls, i) {
var code = 'http://example.com/api/' + urls[i];
$.ajax({
async: false,
url: code,
type: 'GET',
dataType: 'jsonp',
success: function (data) {
showData(data);
},
error: function () {
console.log('ajax Failed!');
},
beforeSend: setHeader,
}).always(function () {
i++;
if (i < urls.length) {
request(urls, i);
}
});
}
console.log("get data suc");
request(urls, 0);
}
函数getData(){
函数请求(URL,i){
var代码=http://example.com/api/“+URL[i];
$.ajax({
async:false,
url:code,
键入:“GET”,
数据类型:“jsonp”,
成功:功能(数据){
showData(数据);
},
错误:函数(){
log('ajax失败!');
},
发送前:setHeader,
}).always(函数(){
i++;
if(iasync:false
不适用于JSONP请求
如果确实需要同步行为,则需要一系列请求,其中第一个成功回调将启动第二个,依此类推。但实际上,如果您只是按照响应出现的顺序来处理它们,那就更好了
例如,您可以传递索引变量:
function getCallback(i) {
return function(data) {
showData(data, i);
};
};
...
$.ajax({
...
success: getCallback(i)
});
...
function showData(data, i){
// use 'i' here to determine where to insert the record
}
即使您的
async:false
有效,这也不是一个好主意。请理解并认识到,它永远不会由同步实现。请查看