最近在用jquery的写了一些ajax功能,开始比较顺利,但昨天遇到了一个奇特的问题。jquery的ajax回调函数不能执行了。
功能描述,实现头像的剪切。在前台用一个drag,然后点击保存,通过ajax发送选择的坐标,实现剪切保存,并返回保存结
束是否成功。
下面是我的代码:
2 $.post(
3 "index/resizeandcrop",
4 { selectorX:$x,selectorY:$y,jdnew:$new},
5 function(data) {},
6 "json"
7 );
8 /*方案二*/
9 $.post(
10 "index/resizeandcrop",
11 { selectorX:$x,selectorY:$y,jdnew:$new },
12 function(data){alert("Data Loaded: " + data);},
13 "json"
14 );
15 /*方案三*/
16 $.ajax({ type: 'POST',
17 url: URL+"index/resizeandcrop",
18 data:{ selectorX:$x,selectorY:$y,jdnew:$new },
19 success: function(data){},
20 dataType: "json"
21 });
方案一:是我的原始代码,能发送坐标,在后台也能剪切和保存,也能返回数据,返回数据是一个succes,但是就是不调用回调
函数。
初步判断是我的语句有问题,于是进过和再三检查,也没发现哪有错了,下面就在尝试一下其他的两个ajax方法,于是有了方案二
和方案三。
方案二三:这两个都是jquery中ajax的不同写法了(自己认识)。但是还是同样的问题,能执行,回复也有,但是就是不执行回调
函数,纠结了很久,没有结果。那语法和写法都应该没问题。
下面就是怀疑是header中的参数不全了,于是拿了两个能完全正确的ajax对比了一下,发现头部文件中也是相同,唯一一个区别就
是Accept: application/json, text/javascript, */*中少了一个
q=1.0
后面还是没解决,下面就准备尝试一下原生的js和换一个后台页面在查查错了。
2011-5-2 放完假,现在查错,加入代码:
2 type: 'POST',
3 url: URL+"index/resizeandcrop",
4 data:{ selectorX:$x,selectorY:$y,jdnew:$new },
5 success: function(data){alert(data);},
6 error: function(){alert(arguments[1]);},
7 dataType: "json"
8 });
现在返回了一个错误:parsererror ,查找后是编码的问题在后面加上header('Content-type: text/html; charset=utf-8');就没问题了,注意是utf-8,如果是utf8则firefox没问题,ie会出问题的。
后面的发现,其实这里的原因是返回的json不严格echo "{'re':'success'}";jquery不能解析造成的报错,后面改为 echo "{\"re\":\"success\"}";就没有错误了。