问题描述
AJAX从后台读取数据返回到前台的问题必须先alert一下,才能获取数据,求帮忙!!问题描述:点击单据号,将单据号通过url,传递至详细信息展示页detail.html,detail.html页面通过这个单据号在后台数据库中查出相关数据,然后展示在页面上,但是在js代码中必须先alert一下,才能将获取的数据显示在页面中,请教各位大牛,怎么解决我猜应该是detail.html获取URL数据,然后到后台去解析,导致不同步了,但是想不到解决办法,求个问大牛帮忙!!获取URL代码:<scripttype="text/javascript">functionGetRequest(){varurl=location.search;//获取url中"?"符后的字串vartheRequest=newObject();if(url.indexOf("?")!=-1){varstr=url.substr(1);strs=str.split("&");for(vari=0;i<strs.length;i++){theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);}}returntheRequest;}</script>
**********************************************向后台传输代码和返回代码<scripttype="text/javascript">$(function(){varRequest=newObject();Request=GetRequest();varurl;url=Request['vbillcode'];$.ajax({type:'POST',url:"/rm/rmcsale/edit_specapplydetail",data:{Listurl:url},async:false,success:function(data){console.log("-----------success-------------");alert("您查询的订单号为:"+data.vbillcode);$(".J-vbillcode").attr("value",data.vbillcode);$(".J-billmaker").attr("value",data.billmaker);$(".J-ctrantypeid").attr("value",data.ctrantypeid);},error:function(data){},dataType:'json',});});</script>
多谢!!
解决方案
解决方案二:
看你代码和加不加alert没大关系的,只是一个赋值操作而已,就算其他地方要使用这3个控件的值,你的ajax是同步的,只要是在这个方法调用之后也不会出问题。。$(".J-vbillcode").attr("value",data.vbillcode);$(".J-billmaker").attr("value",data.billmaker);$(".J-ctrantypeid").attr("value",data.ctrantypeid);改为val试试,有专门给输入控件赋值的方法,不要使用attr设置属性的方法$(".J-vbillcode").val(data.vbillcode);$(".J-billmaker").val(data.billmaker);$(".J-ctrantypeid").val(data.ctrantypeid);
解决方案三:
可能是因为你使用的同步请求,而请求发送到服务器到返回需要点时间,alert刚好填补了这段时间,所以你感觉alert之后才有返回。
解决方案四:
firefox,firebug直接看ajax的返回情况,首先确定firebug里看到返回数据正常但html里没有填充那3个input里再考虑把attr换成val()来整整看。
解决方案五:
引用3楼ayanamireizero的回复:
firefox,firebug直接看ajax的返回情况,首先确定firebug里看到返回数据正常但html里没有填充那3个input里再考虑把attr换成val()来整整看。
我用firebug断点以后也能显示,说明应该是执行时间的问题有什么解决办法没延迟页面加载
解决方案六:
引用4楼skyxuyan的回复:
Quote: 引用3楼ayanamireizero的回复:
firefox,firebug直接看ajax的返回情况,首先确定firebug里看到返回数据正常但html里没有填充那3个input里再考虑把attr换成val()来整整看。我用firebug断点以后也能显示,说明应该是执行时间的问题有什么解决办法没延迟页面加载
应该是后台没有执行完前台就显示了,有没有什么办法延迟前台压面显示呢
解决方案七:
引用5楼skyxuyan的回复:
Quote: 引用4楼skyxuyan的回复:
Quote: 引用3楼ayanamireizero的回复:
firefox,firebug直接看ajax的返回情况,首先确定firebug里看到返回数据正常但html里没有填充那3个input里再考虑把attr换成val()来整整看。我用firebug断点以后也能显示,说明应该是执行时间的问题有什么解决办法没延迟页面加载
应该是后台没有执行完前台就显示了,有没有什么办法延迟前台压面显示呢
延迟显示这是CS的思路success是执行完毕后的回调函数,后台一般不存在没有执行完毕个人推测LZ的页面还有其它加载数据并且处理时间比较长(用firebug自行查看),在执行success方法时页面还没加载完毕,你可以换成面向过程的思路
解决方案八:
url:"/rm/rmcsale/edit_specapplydetail",这里直接return个简单的数据,或者换其他浏览器试下?我写了个简单的例子,测了没问题啊
解决方案九:
$.ajax({type:'POST',url:"/rm/rmcsale/edit_specapplydetail",data:{Listurl:url},async:false,success:function(data){console.log("-----------success-------------");alert("您查询的订单号为:"+data.vbillcode);$(".J-vbillcode").attr("value",data.vbillcode);$(".J-billmaker").attr("value",data.billmaker);$(".J-ctrantypeid").attr("value",data.ctrantypeid);},error:function(data){},dataType:'json',});
试一试吧这段封装成一个函数然后你在声明的下发调用这个函数来实现你的操作。
解决方案十:
ajax状态改为同步jQuery.ajaxSetup({async:false});
解决方案十一:
改成异步请求
解决方案十二:
有时异步需要alert才能出数据,而同步alert没意义.