jquery ajax參数加点号状态200进error
今天開發中遇到一個非常惡心的問題:
用jquery中的ajax提交。發現假設參數中有點號的參數。后臺正常返回200狀態碼的情況下也會走到error:function。
1. 參數data: "topicAbstractInfoVO.belongSubjectId="+subjectId
2. 參數data:“belongSubjectId="+subjectId,
請求正常返回,狀態為200。
第一種情況,跳到了error處理塊。另外一種情況跳到success處理塊。
ajax請求代碼例如以下:
$.ajax({
?url: "/topic/saveMarkDraft.action",
? ? ?dataType: "json",
?type: "POST",
? ? ?data: "topicAbstractInfoVO.belongSubjectId="+subjectId,
? ? ?async:true,
? ? ?success: function(msg){
? ? ?var a=2;
? ? ?var b=a;
? ? ?alert(b);
? ? ?alert(msg);
? ? ?},
? ? ?error:function(msg){
? ? ?var a=1;
? ? ?var b=a;
? ? ?if(msg.responseText=="saveMarkSuccess"){
? ? ?alert(b);
? ? ?}
? ? ?alert(msg);
? ? ?}
});
后臺處理方法:
? ? public String addMarkDraft() {
? ? ? ? print("saveMarkSuccess");
? ? ? ? return "saveMarkSuccess";
? ? }
排查問題:
1. 之前有遇到過類似返回200時跳到error模塊的情況。是由于dataType設置的為html,返回內容為json。類型不匹配也會導致這個問題。(今天的問題不是這個原因,排除)
2. 前面另一個類似的方法也是返回json,js是一樣的配置。是沒有問題的;經過對照代碼發現一個不同點,就是print()方法
2.1 正確的方法是這樣返回的
? ?public String addMarkDraft() {
? ? ? ? String te = JsonUtil.toJson("saveMarkSuccess");
? ? ? ? print(te);
? ? ? ? return "saveMarkSuccess";
? ? }
改動方法有兩種:
1. 將ajax的dataType改為text
2. 將后臺返回的字符串"saveMarkSuccess"用json轉下
結論:
因為返回的內容不是json格式,是string格式。根本問題還是因為js的類型和返回的類型不一致。
總結:
1. ?盡管對于一個字符串,用json序列化后還是一個字符串,通過打印日志發現一個String的字符串用json序列化后沒有什么變化。
2. ?實際上返回到前臺的類型是不一樣的。一個是純文本,一個json格式。盡管看起來是一樣的,實際上是不同的(因為String在java是一個對象,不是原生類型,所以用json處理后是有變化,詳細變化沒有時間細糾。先記住)。
這一點一定要注意
3. ?假設ajax要求返回的是json串。無論后臺的處理類型是什么,最好都通過json進行序列化一下,即便是普通類型
結論:
因為返回的內容不是json格式,是string格式。根本問題還是因為js的類型和返回的類型不一致。
轉載于:https://www.cnblogs.com/wzjhoutai/p/6708249.html
總結
以上是生活随笔為你收集整理的jquery ajax參数加点号状态200进error的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Principle of Computi
- 下一篇: Oracle树查询及相关函数