使用Ajax解析數據遇到的問題

數據格式

我最近在使用JQuery的$.ajax訪問后臺的時候,發現竟然無法解析返回的數據,具體的錯誤記不清了(以后在遇到問題先截個圖),可以在瀏覽器的Console中看到一個錯誤,但是去看這條請求是有數據返回的,所以剛開始我一直以為是Ajax寫的不對,但是這個Ajax也并不是很復雜,實在搞不懂了。

還好這個url可以通過get方式訪問,所以我當時直接在瀏覽器地址欄訪問,發現是有數據返回的,但是這個數據的方式很奇怪,因為現在的瀏覽器都會對JSON數據進行格式化顯示,但是這段數據的格式并非JSON的顯示樣式,反而是XML的方式顯示的,這就奇怪了,明明說的都是通過JSON格式交互的,這是什么情況?我看后臺代碼之后發現他們使用的是@RestController (springMVC 的 org.springframework.web.bind.annotation.RestController)注解,而不是使用的@ResponseBody (使用RestController會告訴SpringMVC使用信息轉換器,就可以不使用@ResponseBody注解,而是SpringMVC通過請求頭的Accept屬性判斷,而有些時候這個值會是application/xml,所以會生成XML格式數據),我先沒有修改這些后臺代碼,而是將JQuery中Ajax的dataType屬性(dataType屬性可以手動設置為json)指定為json,這些數據就可以正常被解析了。

唉,之后寫Ajax還是可以加上dataType屬性吧。后來,我修改后臺代碼,設置response的ContentType (使用response.setContentType(type))為application/json;charset=utf-8也是可以被前端正常解析的(哪怕不使用dataType)。

        $.ajax({url:'',type:'get',//設置Accept 預期服務器返回的數據類型dataType:'json',//contentType 可以指定發送給服務器的數據格式contentType:'application/json;charset=utf-8',data:{}});

跨域問題

因為有些數據是需要訪問其他的應用才可以獲得的,所以就涉及到跨域的問題,處理跨域的問題有兩種:

第一種:使用JSONP來處理跨域問題,只需要將dataType設置為jsonp即可(只支持GET方式的請求,因為其底層使用的的是js添加script標簽,并設置script的src屬性值,所以只能是GET方式)

 $.ajax({url: 'http://localhost:8080/testJsonp',dataType: "jsonp",success: function (data) {console.log(data)}})

這種方式不用修改后臺的代碼,但是并不一定可以100%解決跨域問題,現象就是:請求響應都很正常(200),而且在瀏覽器調試工具中也有數據返回,就是拿不到數據,還會報一個數據格式不正確(是多一個還是少一個,號的問題)這個時候需要使用CORS方式。

如果數據量過大,使用GET方式就不太好了,因為URL長度有限制,這個時候也需要使用CORS方式

方法二:CORS,跨域資源共享。修改后臺的代碼,添加響應頭

  response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,OPTIONS");response.setHeader("Access-Control-Allow-Credentials", "true");

這種方式可以解決絕大部分跨域問題,但是就是需要修改后臺代碼

轉載于:https://www.cnblogs.com/lz2017/p/8361030.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252436.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252436.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252436.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

49、劍指offer--把字符串轉換成整數

題目描述將一個字符串轉換成一個整數,要求不能使用字符串轉換整數的庫函數。 數值為0或者字符串不是一個合法的數值則返回0 輸入描述:輸入一個字符串,包括數字字母符號,可以為空輸出描述:如果是合法的數值表達則返回該數字,否則返回0輸入例子:2147483647…

Git丟棄修改

Git是如何跟蹤修改的&#xff1f;我們之前修改文件后都用到了兩個命令git add <file>、git commit&#xff0c;其實在Git中&#xff0c;每次修改后&#xff0c;如果不add到暫存區&#xff0c;那就不會加入到commit。 查看一下文件內容&#xff1a; 在其中添加一行記錄…

隱藏界面沒有必要應用場景

轉載于:https://www.cnblogs.com/zengsf/p/8366572.html

mynt product model: D1000-IR-120標定相機和IMU外參之二

1. 在之一中使用kalibr標定mynt相機和內置imu的外參數,使用的是720p,30fps的雙目圖像和200hz的imu數據,標定結果誤差比較大,這一次我們改用480p,60hz的雙目圖像和200hz的imu數據進行標定,需要在mynt_sdk中的mynteye.launch中進行如下修改. 默認獲取圖像的2560x720,30fps&#…

AODp

一、AOP是OOP的延續&#xff0c;是&#xff08;Aspect Oriented Programming&#xff09;的縮寫&#xff0c;意思是面向切面編程。 AOP&#xff08;Aspect Orient Programming&#xff09;&#xff0c;作為面向對象編程的一種補充&#xff0c;廣泛應用于處理一些具有橫切性質的…

[洛谷P4174][NOI2006]最大獲利

題目大意&#xff1a;同Petya and Graph&#xff0c;數據范圍改成$n\leqslant5\times10^3,m\leqslant5\times10^4$ 題解&#xff1a;同上 卡點&#xff1a;無 C Code&#xff1a; #include <algorithm> #include <cstdio> #define maxn 5010 #define maxm 50010 co…

使用ros發布UVC相機和串口IMU數據

&#xff11;&#xff0e;目的&#xff1a;為了可以標定普通USB相機和固定在相機上的外置IMU的外參,我希望通過ROS獲取更高分辨率和更高頻率的圖像數據,并且可以將圖像和imu的topic發布出來,直接使用rosbag record錄制話題數據,寫入bag文件,這樣獲得的bag文件直接可以用于相機和…

API自動化測試利器——Postman

自從開始做API開發之后&#xff0c;我就在尋找合適的API測試工具。一開始不是很想用Chrome擴展&#xff0c;用的WizTools的工具&#xff0c;后來試過一次Postman之后就停不下來了&#xff0c;還買了付費的Jetpacks。推出Team Sync Beta之后我又把這個工具推廣給團隊&#xff0c…

gcc,cc,g++,CC的區別

***gcc是C編譯器&#xff1b; ***g是C編譯器&#xff1b; ***linux下cc一般是一個符號連接&#xff0c;指向gcc ***gcc說明 1.gcc編譯常用格式&#xff1a; gcc C源文件 -o 目標文件 或 gcc -o 目標文件 C源文件 或 gcc C源文件 最后一種情況產生的目標文件默認為a.out 2.gcc…

云原生實踐之 RSocket 從入門到落地:Servlet vs RSocket

技術實踐的作用在于&#xff1a;除了用于構建業務&#xff0c;也是為了驗證某項技術或框架是否值得大規模推廣。 本期開始&#xff0c;我們推出《RSocket 從入門到落地》系列文章&#xff0c;通過實例和對比來介紹RSocket。主要圍繞RSocket如何實現Polyglot RPC、Service Regis…

制作.sens數據集跑通bundlefusion

1. 主要參考這篇博客實現 https://blog.csdn.net/Wuzebiao2016/article/details/94426905 2. 首先就是將自己采集的RGBD圖像的保存格式向Bundlefusion需要的格式對齊&#xff0c;如彩色圖的命名格式是frame-000000.color.png&#xff0c;深度圖的命名規則是frame-000000.depth…

用ul li實現邊框重合并附帶鼠標經過效果

邊框重合這個效果并不難&#xff0c;只是我們沒有真正的動手做過而已&#xff0c;下面讓我們來談談用ul li如何實現邊框重合&#xff0c;并附帶鼠標經過效果 1 <!DOCTYPE html>2 <html lang"zh-CN">3 4 <head>5 <title></title>6 …

hive 中窗口函數row_number,rank,dense_ran,ntile分析函數的用法

https://www.cnblogs.com/wujin/p/6051768.html轉載于:https://www.cnblogs.com/0xcafedaddy/p/8385476.html

python之moviepy庫的安裝與使用

目的&#xff1a;因為需要保存一個大大的.mp4視頻&#xff0c;以防過程中設備出現異常導致整個長長的視頻無法正常保存&#xff0c;所以采用分段保存視頻的方式&#xff0c;每500幀保存一段&#xff0c;然后再將視頻合到一起&#xff0e;最近剛開始學習python,發現python真的很…

oracle 之 安裝后pl/sql登錄報ora-12154

這個問題一開始困擾了很久。 查的資料是復制一小段代碼到tnsnames.ora中 SID名 (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST localhost)(PORT 1522)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME SID名) ) 注意SID名前面不能有任何其他字符&…

如何避免表單重復提交

客戶端方案 禁掉提交按鈕。 表單提交后使用Javascript使提交按鈕disable。這種方法防止心急的用戶多次點擊按鈕。但有個問題&#xff0c;如果客戶端把Javascript給禁止掉&#xff0c;這種方法就無效了。 使用Post/Redirect/Get模式 在提交后執行頁面重定向&#xff0c;這就是所…

十六進制轉八進制

【問題描述】 問題描述 給定n個十六進制正整數&#xff0c;輸出它們對應的八進制數。 輸入格式 輸入的第一行為一個正整數n &#xff08;1<n<10&#xff09;。 接下來n行&#xff0c;每行一個由0~9、大寫字母A~F組成的字符串&#xff0c;表示要轉換的十六進制正整數&…

使用iai_kinect2標定kinectV2相機

實驗背景&#xff1a;因為需要制作bundlefusion需要的數據集&#xff0c;所以需要使用kinectV2相機獲取rgbd圖像&#xff0c;年前的時候在我的筆記本上安裝了libfreenect2庫和iai_kinect2&#xff0c;標定過一次kinecv2相機&#xff0c;然后使用kinectv2相機實時獲取的圖像實現…

tar只解壓tar包中某個文件

如果tar包很大&#xff0c;而只想解壓出其中某個文件。方法如下&#xff1a; 只想解壓出Redis-1.972.tar 中的Changes文件&#xff0c;來查看有哪些更改。 [rootuplooking]# tar -tf Redis-1.972.tar Redis-1.972…

扎克伯格的中文夜:想要成功就不能放棄

10月23日消息。雖然并不太流暢。昨天馬克?扎克伯格依舊用中文與清華經管學院主持人完畢了一場對話&#xff1b;在對話中&#xff0c;這位Facebook創始人兼首席運行官闡述了自己學習中文的原因&#xff1a;想要和太太&#xff08;普里西拉?陳&#xff09;的家人交流&#xff1…