jquery ajax一个坑爹的问题
问题描述: jquery ajax dataType为json时,如果json数据不严格,不进入success方法,控制台也不会报错。
data.json
1 {"result":"0","data":2016-04-27}
ajax常规写法代码:
1 $.ajax({ 2 url: 'data.json', 3 type: 'POST', 4 dataType: 'json', 5 success: function(data){ 6 console.log(data); 7 } 8 });
以上代码可能是大多数coder的常用写法,如果服务器返回的是如data.json那样的数据格式,这段代码无任何问题,控制台也没报错,但是就不会执行success方法(小小的一个问题,花费了大半个小时才找出来,不知道各位看官没有踩到这坑)。如果对这个json数据调用json格式化方法,则会报错:
1 JSON.parse('{"result":"0","data":2016-04-27}');//控制台报错:SyntaxError: JSON.parse: expected ',' or '}' after property value in object at line 1 column 26 of the JSON data
在遇到这个问题之前,一直认为error方法没任何用处,但是如果这段代码加上error方法,则会提示错误:
1 $.ajax({ 2 url: 'data.json', 3 type: 'POST', 4 dataType: 'json', 5 success: function(data){ 6 console.log(123); 7 }, 8 error: function(){ 9 console.log("数据错误");//控制台输出:"数据错误" 10 } 11 });
推荐promise写法:
1 $.ajax({ 2 url: 'data.json', 3 type: 'POST', 4 dataType: 'json' 5 }).done(function() { 6 console.log("success"); 7 }).fail(function() { 8 console.log("error"); 9 });
总结:遇到这个坑之后,告诉我一个道理,error方法是必须的,虽然看似没什么作用,但是偶尔的错误提示还是有必要的。