电脑壁纸。。。。

输入关键字或相关内容进行搜索
我在使用mui ajax---getJson的时候发现安卓4.2,4.3 上设置 async = false后,回调函数success调用是同步的,但小米2 安卓4.4的环境就发现调用比较奇怪,一会儿同步,一会儿不同步。本想着写个通用的ajax函数,现在不得不为每个业务函数写单独的success函数,中间我也考虑ajax函数执行后延迟执行下句,不过没什么作用,不知道大家有没有碰到类似的问题,有没有什么好的解决办法?var success = function(response) {
if (dataType === 'json') {
response = JSON.stringify(response);
} else if (dataType === 'xml') {
response = new XMLSerializer().serializeToString(response).replace(/&/g, &&&).replace(/&/g, &&&);
ajaxResponse = (response || '[]');
console.log('ajax suc return' + ajaxResponse);
};$.ajaxSettings.async =owner.ajax = function(data, url) {
ajaxResponse = '';
if (type === 'get') {
if (dataType === 'json') {
$.getJSON(url, data, success);
$.get(url, data, success, dataType);
} else if (type === 'post') {
$.post(url, data, success, dataType);
while(ajaxResponse)
console.log('ajaxResponse is null');
if(!ajaxResponse)
要回复问题请先或
关注: 1 人2518人阅读
web前端开发(15)
在与后台实现数据交互时经常会遇到一种这样的情况:
1.需要用一个ajax请求后台数据,并且要在获取到数据之后再渲染到页面,这个时候就必须用同步(async:false)。
2.然而在这个时候就会有另一种情况,当ajax的请求花费的时间比较长的时候需要一个loading层来显示等待状态
3.这个时候beforeSend是没有效果的,即使把loading的代码写在ajax之前也不行。
4.原因就是ajax的async设置为false时浏览器的渲染(UI)线程和js线程是互斥的,在执行js耗时操作时,页面渲染会被阻塞掉。当我们执行异步ajax的时候没有问题,但当设置为同步请求时,其他的动作(ajax函数后面的代码,还有渲染线程)都会停止下来。即使我的DOM操作语句是在发起请求的前一句,这个同步请求也会“迅速”将UI线程阻塞,不给它执行的时间。这就是代码失效的原因。
5.解决方法(注意:是在异步下实现的):如图
相关链接:
& & & & & &
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7926次
排名:千里之外
原创:14篇
(3)(2)(2)(2)(1)(2)(5)(1)(2)(1)jquery ajax请求方式与提示用户正在处理请稍等
投稿:whsnow
字体:[ ] 类型:转载 时间:
为了提高用户体验度,我们通常会给出 “正在处理,请稍等!”诸如此类的提示。我们可通过设置$.ajax()下的参数beforeSend()来实现
初次使用$.ajax() ,我没有去区分过ajax的异步请求和同步请求的不同,刚开始使用同步请求,以至后来出现许多问题,特别在体验度方面。
异步和同步:
同步意味着执行完一段程序才能执行下一段,它属于阻塞模式,其表现在网页上的现象是——浏览器会锁定页面(即所谓的页面假死状态),用户不能操作其它的,必须等待当前请求返回数据。而使用异步方式请求,页面不会出现假死现象。
提升用户体验度:
当用户提交数据等待页面返回结果是需要时间的,有时这段等待时间比较长,为了提高用户体验度,我们通常会给出 “正在处理,请稍等!”诸如此类的提示。我们可通过设置$.ajax()下的参数beforeSend()来实现,
html关键代码
&div id="warning"&&/div&
js文件中的关键代码
$.ajax(function(){
//省略了一些参数,这里只给出async 和 beforeSend
async: false, //同步请求,默认情况下是异步(true)
beforeSend: function(){
$('#warning').text('正在处理,请稍等!');
注意,如果你按照同步设置 async: false, $('#warning').text('正在处理,请稍等!');在网页中根本没有出现效果,如果将$('#warning').text('正在处理,请稍等!');换成 alert(‘test');在发送请求前会立即看到弹出框,这说明 beforeSend:是执行了,但是换成别的诸如 $('#warning').text('正在处理,请稍等!'); 在请求发出返回结果了都没有看到提示出现。关于这个问题,我是纳闷了很久,问题到底是什么我还是不清楚。
把同步请求改成异步请求,上面的问题就没有了,
beforeSend: function(){
$('#warning').text('正在处理,请稍等!');
会立即被执行。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Ajax调用后JS不生效的问题及解决办法 - freesky_zh - ITeye技术网站
博客分类:
a.jsp通过Ajax调用b.jsp,然后返回b.jsp的内容显示在a.jsp中。现在遇到一个问题,就是在b.jsp中定义了js,在a.jsp中click button并没有调用该js。在firefox中通过Firebug查看源代码。把它保存成html或jsp,js都可以被调用。源代码如下:-----a.jsp----------------------- &%@ page language="java" contentType="text/html" %& &%
String tt = "Title"; %& &%=tt %& &button id="getContent" name="getContent" onclick="getContent();"&Get Content&/button& &p&&/p& &div id="myDiv"& &/div& &p&&/p& End &script type="text/javascript"& xmlhttp = new XMLHttpRequest(); function getContent() { xmlhttp.open("POST","b.jsp",true); xmlhttp.send(); xmlhttp.onreadystatechange=function()
if (xmlhttp.readyState==4 && xmlhttp.status==200)
document.getElementById("myDiv").innerHTML=xmlhttp.responseT
} } &/script& --------------------b.jsp------------------------- &%@ page language="java" contentType="text/html" %& &% String aa = "To include jsp"; %& &%=aa
%& &br /& &input id="myname" name="myname" /& &button id="getName" name="getName" onclick="getName();"&Get Name&/button& &script type="text/javascript"& function getName() { alert("ok"); document.getElementById("myname").value = 'Bill'; } &/script& ---------------------src.html--------------------------- &html&&head&&/head&&body&Title &button onclick="getContent();" name="getContent" id="getContent"&Get Content&/button& &p&&/p& &div id="myDiv"& To include jsp &br& &input name="myname" id="myname"& &button onclick="getName();" name="getName" id="getName"&Get Name&/button& &script type="text/javascript"& function getName() { alert("ok"); document.getElementById("myname").value = 'Bill'; } &/script&&/div& &p&&/p& End &script type="text/javascript"& xmlhttp = new XMLHttpRequest(); function getContent() { xmlhttp.open("POST","b.jsp",true); xmlhttp.send(); xmlhttp.onreadystatechange=function()
if (xmlhttp.readyState==4 && xmlhttp.status==200)
document.getElementById("myDiv").innerHTML=xmlhttp.responseT
} } &/script& &/body&&/html& -----------------------End------------------------
出现这个问题的原因是:直接通过innerHTML动态嵌入的script,浏览器会当做普通的文本,不会当作SCRIPT节点维护到DOM里面,所以调用的时候找不到。
解决办法:用innerHTML嵌入以后,通过DOM从myDIV中取出嵌入的script节点,然后新创建一个script节点,并把嵌入的script里面的内容也赋给新创建的script节点,然后把这个新节点追加到页面的head节点中,这样就可以调用里面的getName方法了。
这里有两种方式:
第一种方式:只修改a.jsp,增加红色部分
document.getElementById("myDiv").innerHTML=xmlhttp.responseT var myDivScript = document.getElementById("myDiv").getElementsByTagName("SCRIPT").item(0); var newScript = document.createElement("SCRIPT"); newScript.innerHTML = myDivScript.innerHTML; document.getElementsByTagName("HEAD").item(0).appendChild(newScript);
这种方式在FF中可以work,但是IE中不能work。
第二种方式:把b.jsp中的js抽取出来放在一个js文件里。在a.jsp中通过src引用的方式把js加到HEAD里面。
在a.jsp的&script& 部分增加一个函数 function append()
--------------------a.jsp-------------------------------------------------------
&%@ page language="java" contentType="text/html" %&
String tt = "Title";
String path = "../js/script.js";
&button id="getContent" name="getContent" onclick="getContent();"&Get Content&/button&
&div id="myDiv"&
&script type="text/javascript"&
xmlhttp = new XMLHttpRequest();
function getContent() {
xmlhttp.open("POST","./b.jsp",true);
xmlhttp.send();
xmlhttp.onreadystatechange=function()
if (xmlhttp.readyState==4 && xmlhttp.status==200)
document.getElementById("myDiv").innerHTML=xmlhttp.responseT
function append() {
var head = document.getElementsByTagName('HEAD').item(0);
var script = document.createElement("script");
script.src = "&%=path %&";
script.type="text/javascript";
script.charset="utf-8";
head.appendChild(script);
------------------------------------b.jsp--------------------------------------------------------
&%@ page language="java" contentType="text/html" %&
String aa = "To include jsp";
&input id="myname" name="myname" /&
&button id="getName" name="getName" onclick="getName();"&Get Name&/button&
--------------------------------------------script.js-----------------------------------------------------------------
function getName() {
document.getElementById("myname").value = 'Bill';
-------------------------------------------------End-------------------------------------------------------------------
这种方式在FF和IE中都能work。
freesky_zh
浏览: 81312 次
我在这里找到了问题的答案:https://subversion ...
没明白后面的一段,LZ 能否详细说一下呢。怎样删除XSD,又怎 ...

我要回帖

更多关于 显卡性能好的笔记本 的文章

 

随机推荐