WebService返回數據前台獲取並處理JSON的相關問題


起因:

  記錄這個問題的起因是一次解答網友的問題,當初自己初次接觸webservice時也遇到過,但在寫答案時,並沒有很深的印象,只是知道webservice在后台返回值的時候,那里是有個坑的。網友問的是字符轉JSON怎么實現,具體問題如下:

將ajax返回的結果

<string>{"img":[{"ID":"0","FileUpName":"A00003.jpg","UpdateFileUpName":"","UpLoadPath":"","SavePath":"C:\Users\yangjinlei\Desktop\image\A00003.jpg","SaveTime":"","UserId":"0"},{"ID":"0","FileUpName":"A00003.jpg","UpdateFileUpName":"","UpLoadPath":"","SavePath":"C:\Users\yangjinlei\Desktop\image\A00003.jpg","SaveTime":"","UserId":"0"},{"ID":"0","FileUpName":"A00003.jpg","UpdateFileUpName":"","UpLoadPath":"","SavePath":"C:\Users\yangjinlei\Desktop\image\A00003.jpg","SaveTime":"","UserId":"0"},{"ID":"0","FileUpName":"A00003.jpg","UpdateFileUpName":"","UpLoadPath":"","SavePath":"C:\Users\yangjinlei\Desktop\image\A00003.jpg","SaveTime":"","UserId":"0"}]}</string>

轉換成JSON格式。


過程:

  第一眼其實能看出來,這個其實就是webservice返回值是個xml格式的串,但為了快速解決問題,第一時間當然按要求來,本地測試通過后上代碼:

  var str = "...";

  JSON.parse(str.substring(str.indexOf("{"),str.lastIndexOf("}")+1));

  

 

    然而,莫名其妙的題主那邊總出問題,str.indexOf()都會報錯,頓時有點懵;正好此時題主給我發了他的webservice代碼,那就......第二種方案走起唄,其實第二種改法才是最有效率的,比較合乎情理的。

改法很簡單,將ajax請求的方法返回值改為void,用Context.Response.Write(json)來返回JSON數據,而不是return一個xml節點。於是,早上折騰了快一個小時,下午幾分鍾就完美解決完事兒。 


總結:

  以后遇到這種json、xml混合返回的問題時

  1. 當后台代碼無法修改時,那沒辦法,心里默默的罵句娘,然后老老實實的處理字符串吧,把json格式的字符串想辦法截取出來,然后JSON.parse()轉換;
  2. 能修改后台就盡量該后台代碼,就換一句代碼而已;

  后話:截取字符串時應該注意下原串的內容,像上面我的截圖里,可以注意到,路徑里的\都被屏蔽了,需要提前額外處理下(replace(/\\/g,"/"))。

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM