【编程笔记】jquery中的ajax的回调函数不能执行

最近在用jquery的写了一些ajax功能,开始比较顺利,但昨天遇到了一个奇特的问题。jquery的ajax回调函数不能执行了。

功能描述,实现头像的剪切。在前台用一个drag,然后点击保存,通过ajax发送选择的坐标,实现剪切保存,并返回保存结

束是否成功。

下面是我的代码:

View Code
1 /*方案一*/
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 放完假,现在查错,加入代码:

View Code
1 $.ajax({
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\"}";就没有错误了。

知识共享许可协议
作品Tim Zhang创作,采用知识共享署名 3.0 中国大陆许可协议进行许可。 。
原文地址:https://www.cnblogs.com/ccdc/p/2031514.html