怎样安装Dreamweaver的jquery扩展,我们通常会用dreamweaver这个网页设计软件来编写网页前台代码,在编写代码时会经常出现下拉的菜单供我们选择,为我们编写代码节省了很多的时间。这样......
2023-03-17 342 JQUERY DREAMWEAVER
今天调试一个网页时,发现函数返回时值是正确的,但调用函数的结果怎么也不正确。想了一下才发现,调用函数时,使用jquery中的post方法是异步调用的。
也就是说函数返回时,调用函数早就执行完成了。所以即使被调函数的返回值是正确的,也无法正确的处理了。
异步的调用方式:
开始我写的函数执行的过程是这样的(post会被异步的进行操作):
$.post("logic.php", {
type: "query_sql_get_data",
sql: sql
}, function (result) {
var data_list = eval("(" result ")");
return (data_list.length > 0);
});
异步的调用方式的后果:
在被调函数中,我需要用上面代码的返回值来看数据库是否有重复数据。
但由于是异步调用,等post返回时,我的调用函数早就执行完成了,根本等不到被调函数的返回值。所以结果超出了预期。
post无法设置同步:
POST方法在Jquery中默认是不支持同步调用的。如果非要使用同步方法,可以设置ajax的全局变量:
$.ajaxSetup({
async :false
});
async为true表示异步,也是默认值。为false时表示同步。
修改全局变量的隐患:
按上述方法修改全局变量后,你的整个站点代码都将受到影响。也就是说全部ajax请求都会按照同步的方式来处理。这可能是你不希望看到的。
当然你可以在使用完成后再把全局变量改过来。不过这似乎也不太好。应该还有更好的办法。
通过ajax直接调用:
$.ajax({
type : "post",
url : "logic.php",
data : data, //var data = {"type": "query_sql_get_data", "sql": sql};
async : false, // 同步调用
success : function(result){
var data_list = eval("(" result ")");
hasError = (data_list.length > 0);
}
});
return hasError; // 注意返回要在这里,不要在成功时的回调函数时,否则调用函数无法得到正确的返回值。
难以发现的问题:
类似这种问题,如果没有相关经验时,可能不容易发现。因为在调试单个函数时,你得到的结果都是正确的。甚至你可能怀疑是否浏览器出了问题。
所以有时除了单步跟踪外还应该注意函数的调用栈等一些额外的信息,不断的积累经验。
同步异步如何用:
ajax的作用其实是为了解决页面的局部刷新的。所以我们通常使用的都是异步请求。这也是为什么以异步作为默认值的原因。但当我们处理处理逻辑相关的业务时(特别是有先有顺序那种),就要考虑同步的情况了。
以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!
标签: JQUERY
相关文章
怎样安装Dreamweaver的jquery扩展,我们通常会用dreamweaver这个网页设计软件来编写网页前台代码,在编写代码时会经常出现下拉的菜单供我们选择,为我们编写代码节省了很多的时间。这样......
2023-03-17 342 JQUERY DREAMWEAVER
jQuery MiniUI 快速入门,前段时间由于工作的原因接触到MiiUI。感觉MiiUI很强大,使用起来也很舒服。下面我就带领大家快速的使用MiiUI。MiiUI-专业WeUI控件库它能缩短开发时......
2023-03-17 330 JQUERY
怎么使用JQuery Mobile开发移动网站,现在越来越多的人用网站来做手机a,这样的好处是,可以做一个网站,基本上可以做到多个平台adroid,io,w,都可以使用。这里使用JQueryMoile......
2023-03-17 374 JQUERY