Javascript 我将ajax设置为async:false,但不起作用

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:

我正在尝试从其他域获取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: '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(i
您的假设是正确的,
async: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
有效,这也不是一个好主意。请理解并认识到,它永远不会由同步实现。请查看