jQuery ajax函数遇到的问题

  我在dom中添加了onclicl="post()" 
 <scriopt>

function post()

{

  dosomething....
  

$.ajax({
type:'post',
timeout:0,
url:"/admin/push/app",
data:{'class':$class, 'data':$data},
success:function(data) {
console.log('121');
data = data.replace(/[\r\n\s]/g, '');
$('#unok').attr('disabled', false);
$('#unok').attr('id', 'ok');
if (data === '0') {
alert('输入的内容有误');
return fale;
} else {
alert('操作成功');
return;
window.location.href="/admin/push/device";
}
}, error:function(){
$('#unok').attr('disabled', false);
$('#unok').attr('id', 'ok');
console.log('123');
});

}

   </script>

不用去管我操作了什么dom, 也不用去管我发起了什么请求, 这个请求在chrome FF里面根本没有去发起,

而且console报告了一个这样的错误Maximum call stack size exceeded
那么问题在哪里呢?
搜索了很多资料也没有找到。在看一篇资料的时候发现了这么一句话

getScript方法介绍

 Load a JavaScript file from the server using a GET HTTP request, then execute it.

——官方如是说

有两个特征,一是能够使用get的http请求服务器资源下载到本地,二是能够在加载完毕之后并执行这个脚本。它的深层次的写法是这样的:

$.ajax({

url: url,

dataType: "script",

success: success

});

刚好好我在页面中设置了ajaxsetup函数,在beforeSend对象的闭包中我使用了$.getScript函数。
那么 是不是这个问题呢?
经过我多次验证的确是这个问题(PS:并不懂原理)。
下面附上我的测试代码:

 1 <script type="text/javascript" src="/static/admin/js/jquery-1.9.1.min.js"></script>
 2 <script type="text/javascript">
 3     (function(){
 4         $.ajaxSetup({
 5         timeout: 3000,
 6             //完成请求后触发。即在success或error触发后触发
 7         complete: function (xhr, status) {
 8                 // console.log(xhr);
 9                 // console.log(status);
10                 if ([200].lastIndexOf(xhr.status) >= 0){
11                     // console.log(xhr.status);
12                     // console.error('页面出现了问题, 请联系管理员');
13                     //先检查是否有layer对象
14                     if (typeof (layer) == 'undefined') {
15                         //加载js对象和css文件
16                         $.getScript('/plug-in/layer/layer.js', function(){
17                             // addCSS('/plug-in/layer/skin/layer.css');
18                             layer.msg('页面出现了问题, 请联系管理员!', {icon:2});
19                         });
20                     } else {
21                         layer.msg('页面出现了问题, 请联系管理员!', {icon:2});
22                     }
23                     return false;
24                 }
25                 if (xhr.responseText.indexOf('<script>') >-1) {
26                     document.write(xhr.responseText);
27                 }       
28             },
29         beforeSend: function (xhr) {             
30                 
31                 //先检查是否有layer对象
32                 if (typeof (layer) == 'undefined') {
33                     // 加载js对象和css文件
34                     $.getScript('/plug-in/layer/layer.js', function(){
35                         // addCSS('/plug-in/layer/skin/layer.css');
36                         layer.load(2, {
37                             shade: [0.1,'#fff'],
38                             time:10*1000 //0.1透明度的白色背景                           
39                         });
40                     });
41                 } else {
42                     layer.load(2, {
43                             shade: [0.1,'#fff'],
44                             time:10*1000 //0.1透明度的白色背景
45                     });                       
46                 }
47             }
48             
49             });
50             })();
51 
52     function ajax()
53     {
54         $.ajax({
55             type:'get',
56             url:'/',
57             success:function(data) {
58                 console.log(data);
59             }, error:function() {
60                 console.log('error');
61             }
62         });
63     }   
64     function ajax1()
65     {
66         $.ajax({
67             type:'get',
68             url:'/',
69             success:function(data) {
70                 console.log(data);
71                 ajax();
72             }, error:function() {
73                 console.log('error');
74             }
75         });
76     }
77     </script>
78     <script type="text/javascript">
79 
80     </script>
81     <button onclick="ajax()">OK</button>
82     <button onclick="ajax1()">OK1</button>

下面处理几个假设:

如果我能读懂jquery源代码,那么这次的问题是不是就不会困扰我半天时间了?
如果我能仔细的看ajaxsetup函数的对象的处理方式的话,那么是不是这问题就很快解决了?

解决方案:

读下jquery源代码。

 

posted @ 2015-09-15 17:54  祥子爱游戏  阅读(186)  评论(0)    收藏  举报