ajax请求后没有刷新,jquery ajax请求成功 但是数据没有更新?

本文探讨了jQuery AJAX请求成功后数据未能更新的常见问题。问题出现在服务器返回的数据中含有非法字符,如回车键,导致数据类型不符合预期的JSON格式,从而不进入success回调函数。解决方案是确保返回数据的严格JSON格式,以及在插入数据前进行数据清理。此外,还提到了跨域请求可能导致的错误,并给出了设置dataType属性的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//创建一个XMLHttpRequest对象

function createXMLHttpRequest(){

if(window.XMLHttpRequest){ //Mozilla

XMLHttpReq=new XMLHttpRequest();}else if(window.ActiveXObject){try{XMLHttpReq=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{XMLHttpReq=new ActiveXObject("Microsoft.XMLHTTP");

}catch(e){}}}}//发送请求函数

function send(url){

createXMLHttpRequest();

XMLHttpReq.open("GET",url,true);

XMLHttpReq.onreadystatechange=proce; //指定响应的函数

XMLHttpReq.send(null); //发送请求}function proce(){

if(XMLHttpReq.readyState==4){ //对象状态

if(XMLHttpReq.status==200){//信息已成功返回,开始处理信息

alert("投票成功");}else{window.alert("所请求的页面有异常");}}}function checkselect(){var checkNum=0;var num=0;var obj=document.getElementsByTagName("input");

for(i=0;i

checkNum++;break;}}//alert(checkNum==0?"没有选择":"有选择")

if(checkNum >"0"){//如果有选中的话则调用创建ajax实例的autoComplete()meth

//参数为你要传入到处理页面checkvote.asp的投票数

//将值赋值给隐藏域

alert(num);

send("checkvote.asp?

满意答案

看下你上面的这段代码。

你用ajax send请求后、肯定你要在这个请求页面也就是这个url页面内执行相应的操作。比如你写insert返回true和false你是要返回给发送请求的这个页面的、返回时调用callback方法来判断请求的状态是不是200,是200了下来就该判断返回的结果了。如果xmlhttp.responseText返回的是true就成功。负责false不成功.你要明白 true和false是你在send()方法启用这个url页面给返回的值。也可以返回1或者0。都由自己随便启。callback回调方法判断的和你在返回的值 必须一致。负责无法判断、好好看下昨天给你的注册时候判读那用户名那段代码。是怎么调用方法 怎么启用ajax。怎么在check这个页面来判断注册的用户名 后返回值 、返回后 调用callback来判断返回内容。好好看看

function proce(){

if(XMLHttpReq.readyState==4){ //对象状态

if(XMLHttpReq.status==200){//信息已成功返回,开始处理信息

alert("投票成功");

}

else{

window.alert("所请求的页面有异常");

}

}

jquery ajax请求成功,返回了数据,但是不进success的问题

这几天一直被 ajax请求成功,返回了数据,但是不进success的问题困扰着,怎么弄就是解决不了,总以为是:$(document).ready(function(){});没起作用,一直找页面加载的方法来试,整了好几天没整出来....今天比较幸运,在网上找到了一篇关于这方面问题的文章,按上面的方法一试,果然ok了,哈哈哈,真是太高兴了....终于解决这个问题了。

这个问题的原因(来自http://www.myexception.cn/ajax/413061.html的拷贝内容):

--------------------------拷贝内容 start ----------------------------

“   1.状态码返回200--表明服务器正常响应了客户端的请求;

2.通过firebug和IE的httpWatcher可以看出服务器端返回了正常的数据,并且是符合业务逻辑的数据。

但是,程序就是不进入到回调函数success: function(data){****}而是进入到error: function(data){***}

记得上次是因为存在跨域访问的问题导致。这次查看不存在跨域的问题。此时就很是不解。

事情的来源是这样的: 后台的配置管理模块中有一块是关于国际化的配置,增加国际化描述等等,查询国际化描述。

问题的来源是在输入key='a' 查询前十条数据时发现可以正常的展现数据,但是当我输入key值为z时,并且再查询前20条数据是发现数据不能展现,但是server返回了数据库中的数据。这时第一反应是事不时数据返回的有问题,粗略的检查了返回的数据发现和第一次查询没有什么明显的区别。但是只查询第十四条数据时发现,显示不出来。这时候就开始怀疑了数据问题,进而到数据库中查找第十四条数据没有发现什么特别的地方。

这时开始怀疑,难道是JS程序有处理数据兼容性有问题,觉得甚是不可思议。整了大约半小时,越来越觉得不大可能。就放弃了这种想法。

有转向,重新审视数据。 但是发现数据从中间换行了,没太在意。 在纠结了一会儿后问一同事,指出数据可能多了一个"回车键",在其指点下到数据库表中再次查看该条数据发现有一个字段的值多了一个"回车键"。删除后,一切恢复正常。

思考第一次和第二次碰到的问题,我初步认识到:

1. 返回的数据类型一定要符合定义的数据类型。即如果你定义的 dataType 是 json 类型的,那么返回来的数据一定是 json 才可以,平且不然就会执行 error 里的程序块儿。

(1) 同时需要特别的注意返回的JSON数据是否是严格的JSON格式.

(2) 也应该严重关切当后台返回的是一个List 数据(List当中的数据是Json格式)时,有没脏数据即不是严格的JSON格式。

很隐蔽的可能是数据某一个字段中在开始或末尾含有特殊字符,以"回车键"、"Tab键"等

这类隐蔽错误的规避措施就是好的编程习惯:

a. 对于在页面填写入库的数据最好强制性的做,去空操作。

b. 特殊的业务需注意特殊字符。

这样还不够,因为在开发过程中测试或开发人员自己在数据库中手动添加数据,可能会多加了空格等,导致程序调试,测试带来了麻烦。 这时就需要考虑在后台代码对获取的数据做处理。

2. 原因是ajax请求跨域了,解决方法是在两个文件里都添加一段 js: [/b]document.domain,或者采用Jsonp的方式,如我的前一篇blog中提到的。

还有一点对JQuery 中Ajax的一点其它的认识: 客户端发起请求,得到服务器端的相应是200,没有问题.此时在判断进入success 对应的回调函数还是进入到error对应的回调函数之前,可能会校验一些东西:

1. 返回的每条数据是否是dataType中定义的数据类型。如果有部分数据不是或者哪怕一条数据没有严格的按照dataType定义的类型,程序就会进入到error:function(){****}

2. 请求的域和当前域是否是同一域,如果不是同一域也十分有可能进入error:function(){***}   ”

------------------------------end -------------------------------------

通过看了这段内容后,我再对照我的ajax 看了一遍,发现我少配了一个属性(dataType属性)因为我数据类型返回的是json类型,而我这边没有配dataType:'json',这一属性,所以导致出现了此问题。不过, 困扰我这么久的问题终于解决了,下次得万分小心才是,该配置的东西还是得配置,不能偷懒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值