1.在使用$.ajax发接口时想对返回数据做一些处理后拿到其他方法中使用

  发请求函数如下:

function getProjectName(projectId){
project.projectName = [];
$.ajax({
type: conf.GET,
url: conf.API_qryProjectList+"?projectId="+projectId,
dataType: "JSON"
}).done(function(data)
console.log("执行getprijectName的done");
});
}

  使用时代码如下:

function qryTaskInfo(projectId) {
$.ajax({
type: conf.GET,
url: conf.API_qryTaskList+"?myTaskFlag="+projectId+"&userId="+conf.userId,
dataType: "JSON"
}).done(function(data) {
project.taskList = data.taskList; var taskList = project.taskList;
var projectArrays = [];
var projectIdArrays = [];
for(var i = 0; i < taskList.length; i++) {
projectId = taskList[i].projectId;
if (!isContainProjectId(projectIdArrays, projectId)) {
var projectObject = {"projectId": projectId + ""};
projectIdArrays.push(projectObject);
console.log("调用getProjectName");
getProjectName(projectId);
console.log("调用getUserByProjectId");
getUserByProjectId(projectId);
console.log(project.projectName);
console.log(project.projectUsers);
console.log("-----------");
var pName = {"projectName": project.projectName+""};
var pUsers = {"projectUsers": project.projectUsers+""};
projectIdArrays.push(pName);
projectIdArrays.push(pUsers);
console.log(pName);
console.log(pUsers);
}
}
console.log("huhx projectids: " + projectIdArrays);
var hasFinish = 0, hasComplete = 0, total = 0,projectName,users;
for(var i = 0; i < projectIdArrays.length; i++) {
for(var j = 0; j < taskList.length; j++) {
if (projectIdArrays[i].projectId == taskList[j].projectId) {
total ++;
if (taskList[j].status == "1") {
hasFinish++;
} else if (taskList[j].status == "3") {
hasComplete++;
}
projectIdArrays[i].hasFinish = hasFinish;
projectIdArrays[i].hasComplete = hasComplete;
projectIdArrays[i].total = total;
}
}
projectArrays.push(projectIdArrays[i]);
}
console.log("huhx arrays: " + projectArrays);
projectList=projectArrays;
//console.log(data);
});
}

  执行结果:

  问题:

    在接口已发送和接口返回数据这段时间内执行了其他js代码,导致我在done中做的处理都没及时生效。

  解决方法:

    在请求参数中添加async:false,设置为同步发送请求。

 添加之后控制台:

关于jquery的$.ajax发接口的同步与异步问题的更多相关文章

  1. js中请求数据的$post和$ajax区别(同步和异步问题)

    $.post和$.Ajax都为页面上向后台发送请求,请求数据 1.post 因为post默认为异步请求,可是有时候我们会发现,本来要求请求马上出现,可是异步会导致后面突然再执行,这样就出很多问题 2. ...

  2. jQuery的Ajax初识

    1. 什么是Ajax? Ajax是“Asynchronous Javascript And XML(异步Javascript和XML)”的缩写, 是指一种创建交互式网页应用的网站开发技术. Ajax不 ...

  3. jquery的ajax同步和异步

    之前一直在写JQUERY代码的时候遇到AJAX加载数据都需要考虑代码运行顺序问题.最近的项目用了到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去 ...

  4. jquery的ajax同步和异步的理解及示例

    之前一直在写JQUERY代码的时候遇到AJAX加载数据都需要考虑代码运行顺序问题.最近的项目用了到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去 ...

  5. JQuery 之 Ajax 异步和同步浅谈

    Ajax 同步和异步的区别 同步是当 JS 代码加载到当前 Ajax 的时候会把页面里所有的代码停止加载,页面出现假死状态:当这个 Ajax 执行完毕后才会继续运行其他代码此时页面假死状态才会解除.反 ...

  6. js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快、简单 post:安全,量大,不缓存)(服务器同步和异步区别:同步:等待服务器响应当中浏览器不能做别的事情)(ajax和jquery一起用的)

    js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快.简单 post:安全,量大,不缓存)( ...

  7. 关于Jquery中ajax介绍

    jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax() 返回其创建的 XMLHttpRequest 对象.大多数情况下你无需直接操作该函数,除非你需 ...

  8. Bootstrap 使用教程 与jQuery的Ajax方法

    jQuery.ajax(url,[settings]) 更加详细的内容参考    jQuery API 中文在线手册 概述 通过 HTTP 请求加载远程数据. jQuery 底层 AJAX 实现.简单 ...

  9. Web前端学习笔记之JavaScript、jQuery、AJAX、JSON的区别

    官网的英文解释: javascript和jQuery有点关系,js是一种脚本语言,主要用于客户端,现在主要用于实现一些网页效果. jquery是js的一个库,你可以认为是对js的补充,提供了很多方便易 ...

随机推荐

  1. Linux -- 统计文件的行数

    统计单个文件有多少行 方法1: awk '{print NR}' test1.sh|tail -n1 方法2: awk 'END{print NR}' test1.sh 方法3: grep -n &q ...

  2. hdu_2688_Rotate(树状数组)

    题目连接:hdu_2688_Rotate 题意:给你n数,(n<=3e6),有两个操作,Q为 当前有多少对数,满足严格递增,R l,r为旋转l,r这个区间的数 题解:求严格递增的顺序对我们可以反 ...

  3. Mysql程序

    drop table if exists comp_ap; create table comp_ap as select ProjectName, ModelCode, 'AP_ACMClosed' ...

  4. hbase port

    From "Jonathan Hsieh (JIRA)" <j...@apache.org> Subject [jira] [Updated] (HBASE-10123 ...

  5. Linux Mint 17.2个性化配置

    一.开启root 帐号登陆 设置一个口令,使用: sudo passwd root 当你使用完毕后屏蔽root帐号使用以下命令锁定root帐号 : sudo passwd -l root 如何在终端模 ...

  6. drawRect & 内存 -> 深究

    转载自:http://bihongbo.com/2016/01/03/memoryGhostdrawRect/ 在平日的开发中,随意覆盖drawRect方法,稍有不慎就会让你的程序内存暴增.下面我们来 ...

  7. Mac 生产力探究

    转载自:http://devtian.me/2015/04/15/about-my-productivity-tool-in-MacOSX/ ##密码管理器 1Password 1Password 是 ...

  8. A. Round House

    A. Round House time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  9. JAVA基础--super关键字

    子类对象new的时候堆里的内存分配: 1. 父类成员变量 2. 子类成员变量 3. this对象指向自己 4. super对象指向父类 super调用父类的方法: class FatherClass ...

  10. HttpClient 教程 (二)

    第二章 连接管理 HttpClient有一个对连接初始化和终止,还有在活动连接上I/O操作的完整控制.而连接操作的很多方面可以使用一些参数来控制. 2.1 连接参数 这些参数可以影响连接操作: 'ht ...