1. 程式人生 > >ajax請求返回map,前端獲取結果

ajax請求返回map,前端獲取結果

因業務需求,今天需要ajax請求的時候從後端返回一個map,但是問題是怎麼在前端取值,這個以前遇到過,以為會比較簡單,但是百度很多答案都不完整,導致沒有辦法借鑑。這裡做下記錄

後端程式碼:

@RequestMapping(value="/getCityByLevel.action", method = RequestMethod.POST)
    public @ResponseBody Object getCityByLevel() {
        //查詢一線城市
        List<RhCityDto> cityInfo = rhCityService.listCityByLevel("");
        List<RhCityDto> cityInfo1 = new ArrayList<RhCityDto>();
        List<RhCityDto> cityInfo2 = new ArrayList<RhCityDto>();

        for(RhCityDto info :cityInfo){
            if(CITY_LEVEL_ONE.equals(info.getLevel())){
                cityInfo1.add(info);
            }else{
                cityInfo2.add(info);
            }
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("cityInfo1",cityInfo1);
        map.put("cityInfo2",cityInfo2);
        return map;
    }

可以看到上面的程式碼返回的是Map<String,List<Object>>,注意使用了@ResponseBody註解

前端請求和處理程式碼:


/**
 * 城市下拉複選框內容賦值
 */
function initCity(){
    var json = {
    };
    $.ajax({
        type: "POST",
        url: "../bireport/getCityByLevel.action",
        contentType : "application/json",
        dataType:"json",
        data: JSON.stringify(json),
        success: function(resp){
            //這裡的cityInfo1是後端map的key
            var aa = resp["cityInfo1"];
            var firstCity ="";
            for(var city in aa){
                firstCity+= "<option value='"+aa[city].code+"'>"+aa[city].name+"</option>"
            }
             aa = resp["cityInfo2"];
            var secondCity ="";
            for(var city in aa){
                secondCity+= "<option value='"+aa[city].code+"'>"+aa[city].name+"</option>"
            }
             
            $("#firstCity").html(firstCity);
            $('#firstCity').selectpicker("refresh");
            $("#secondCity").html(secondCity);
            $('#secondCity').selectpicker("refresh");

        },
        error:function(resp){
            $.messager.alert('出錯了','系統出錯,請聯絡管理員。','error');
        }
    });
}

上面的 dataType宣告為"json"

注意點:

1前端傳送ajax請求時 dataType一定宣告為"json"

ajax請求dataType值為json,jquery就會把後端返回的字串嘗試通過JSON.parse()嘗試解析為js物件。所以如果你不將dataType設定為json,可以這樣自己用json解析,如下:


/**
 * 城市下拉複選框內容賦值
 */
function initCity(){
    var json = {
    };
    $.ajax({
        type: "POST",
        url: "../bireport/getCityByLevel.action",
        contentType : "application/json",
        dataType:"text",
        data: JSON.stringify(json),
        success: function(resp){
            //自己進行json解析也可以
            resp = JSON.parse(resp);
            var aa = resp["cityInfo1"];
            var firstCity ="";
            for(var city in aa){
                firstCity+= "<option value='"+aa[city].code+"'>"+aa[city].name+"</option>"
            }
             aa = resp["cityInfo2"];
            var secondCity ="";
            for(var city in aa){
                secondCity+= "<option value='"+aa[city].code+"'>"+aa[city].name+"</option>"
            }
 
            $("#firstCity").html(firstCity);
            $('#firstCity').selectpicker("refresh");
            $("#secondCity").html(secondCity);
            $('#secondCity').selectpicker("refresh");

        },
        error:function(resp){
            $.messager.alert('出錯了','系統出錯,請聯絡管理員。','error');
        }
    });
}

預期伺服器返回的資料型別。如果不指定,jQuery 將自動根據 HTTP 包 MIME 資訊來智慧判斷,比如 XML MIME 型別就被識別為 XML。在 1.4 中,JSON 就會生成一個 JavaScript 物件,而 script 則會執行這個指令碼。隨後伺服器端返回的資料會根據這個值解析後,傳遞給回撥函式。可用值: 

•"xml": 返回 XML 文件,可用 jQuery 處理。
•"html": 返回純文字 HTML 資訊;包含的 script 標籤會在插入 dom 時執行。
•"script": 返回純文字 JavaScript 程式碼。不會自動快取結果。除非設定了 "cache" 引數。注意:在遠端請求時(不在同一個域下),所有 POST 請求都將轉為 GET 請求。(因為將使用 DOM 的 script標籤來載入)
•"json": 返回 JSON 資料 。
•"jsonp": JSONP 格式。使用 JSONP 形式呼叫函式時,如 "myurl?callback=?" jQuery 將自動替換 ? 為正確的函式名,以執行回撥函式。
•"text": 返回純文字字串
 

2後臺方法的宣告需要使用@responseBody??

@responseBody註解的作用是將controller的方法返回的物件通過適當的轉換器轉換為指定的格式之後,寫入到response物件的body區,通常用來返回JSON資料或者是XML資料。

這個註解表示該方法的返回結果直接寫入HTTP response body中,一般在非同步獲取資料時使用。

在使用@RequestMapping後,返回值通常解析為跳轉路徑。加上@responsebody後,返回結果直接寫入HTTP response body中,不會被解析為跳轉路徑。比如非同步請求,希望響應的結果是json資料,那麼加上@responsebody後,就會直接返回json資料。
 

相關推薦

ajax請求返回map前端獲取結果

因業務需求,今天需要ajax請求的時候從後端返回一個map,但是問題是怎麼在前端取值,這個以前遇到過,以為會比較簡單,但是百度很多答案都不完整,導致沒有辦法借鑑。這裡做下記錄 後端程式碼: @RequestMapping(value="/getCityByLevel.ac

Shiro攔截器在登入時判斷是ajax請求返回json普通請求跳轉頁面

在使用shiro時,會遇到普通的頁面請求以及api介面呼叫的請求,因此需要區別對待來判斷是跳轉登入頁面還是返回json的資料: 1.建立攔截器 package org.zyyd.base.filter; import com.alibaba.fastjson.JSONObject;

spring boot security 實現登陸時ajax請求返回json而不是直接頁面跳轉

1、編寫自己的SuccessHandler public class AuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {public void onAuthenticati

php後臺如何給前端發起的AJAX請求返回一個JSON格式的"物件

應專案需求,讓改一個php後臺程式碼,對於一個從未碰過php,前端也不怎麼接觸。只好通過快速學習來,補充知識點,通過學習對於php如何從資料庫中獲取資料,並且轉為json,傳給前端做一次總結。 PHP端 <?  資料庫 $inAjax = $_GET['inAj

利用ajax請求後臺返回mapajax中解析map資料

後臺返回的資料為: Map<String, String> mapList = new HashMap<String, String>(); mapList.put(key, value); Map<String, Map<String, String&g

Ajax請求成功後獲取success中的返回的問題

1.問題描述:在使用Ajax獲取josn傳過來的集合後,在success回撥函式中對josn資料解析完成之後,返回的值為空 2.解決辦法:設定Ajax的方法引數async為false,

關於AJAX請求後臺資料接收後臺返回的JSON資料以及前臺遍歷json資料和append追加元素。

在這兩天的學習以及練習過程中,需要涉及到微信小程式的一些東西。在小程式中,是不能直接跳轉後臺邏輯來獲取資料,而是通過使用AJAX傳值和AJAX請求,來向後臺邏輯傳遞資訊。 1,比如說註冊,填寫資訊之後,通過AJAX傳遞給後臺,後臺處理返回是否註冊成功的JSON資料,前臺再加以分析是否註冊成功,

mybatis返回mapkey為指定屬性value為實體類結果

實體類: 資料庫: CREATE TABLE `job_title_info` ( `_jobtitleid` varchar(255) DEFAULT NULL, `_shortname` varchar(255) DEFAULT NULL, `_ful

Ajax請求返回一個頁面實現頁面區域性重新整理

本文實現Ajax的區域性重新整理。思路如下: 首先,從JSP頁面A.jsp向服務端發起一個Ajax請求,由Action中方法MethodA處理,該MethodA方法進行資料組裝後,返回一個jsp頁面Result.jsp,然後在Ajax的返回結果中,將Result.jsp元素

關於jquery ajax請求發了返回值也有但是卻無法進去ajax的success回撥函式

        這幾天在除錯專案中發現了jquery ajax出現了,請求發了,用chorme的network 發現請求也成功了,最後發現沒有進入ajax的success回撥函式,這個問題經我除錯發現

前端ajax請求跨域使用jsonp完美解決

【1】今天在html中ajax請求另外一個專案的接口出現跨域問題,好吧,那就想辦法解決吧,網上百度了有jsonp解決方案,但是其中有各種坑(坑是因為自己不瞭解導致),直接上原始碼吧。。。。。。【前端】function showImg(){ $.ajax({         u

使用jQuery傳送POSTAjax請求返回JSON格式資料

問題:使用jQuery POST提交資料到PHP檔案, PHP返回的json_encode後的陣列資料,但jQuery接收到的資料不能解析為JSON物件,而是字串{"code":-1,"msg":"12

list集合轉換成json資料ajax請求返回json資料再通過迴圈顯示出來

之前在網上查了很多關於迴圈顯示ajax返回值的方法,很多都不對的,顯示不了我要的結果。後來自己鼓搗出來了,發出來分享一下自己的成果。因為ajax不能返回集合的,需要把集合list轉換成json返回,再用迴圈的方式,顯示出結果。 操作層 //編碼方式request.set

通過Ajax請求後臺資料返回JSONArray(JsonObject)頁面(Jquery)以table的形式展示

點選“會商人員情況表”,彈出層,顯示一個表格,如下圖: 利用Ajax和Jquery和JSONArray和JsonObject來實現: 程式碼如下: 在hspersons.html中: <!DOCTYPE html> <html> <head&g

AJAX 請求返回存放list的map

@RequestMapping(value="/csg/objection/getObjRt.shtml") @LayOuts(checklogin=PageType.checkloginval,page=PageType.JSON,desc = "", viewpage

Ajax請求到actionaction返回整個頁面的方式

以前用Ajax都是返回物件資料,然後迴圈遍歷物件資料去拼接成某個需要重新整理模組的內容。當資料量大的時候,或者頁面節點比較複雜多的時候,還真麻煩,而且需求改變的時候,要去改變拼接的內容,實在看得眼花繚亂,老實說,Ajax,jQuery那些技術並不精通,等有時間再

除了時間戳後端返回時間前端的處理

後端 時間 res result () bsp 前端 string 如果 如果後端獲取的時間是data.results[i].time; var aa=new Date(data.results[i].time);var dd=aa.toLocaleString(); 用E

asp.net mvc項目實戰遇見問題及解決方式----ajax請求500錯誤請求多表數據

導航欄 asp 遇見 mvc 方式 出現 .net alac 利用 ajax請求出現500錯誤——但是想實現的功能是,把一個頁面分成了兩份,點擊右邊導航欄,利用ajax請求,請求數據,在右邊出現相應頁面,當時使用的是partialAction然後出現了這個500錯誤,主要就

JS中將ajax請求返回json數據動態生成表格顯示在div中

等待 query 客戶端 versions 包含 index 方法 func 數據 1、頁面內容 <div style="width:900px;height:400px;" id="tableInfo"></div> 2、js內容 $.aja

使用原生JS發送AJAX請求(XMLJSON解析)

status quest chan ldoc text nbsp 字符 tco send mybutton.addEventListener(‘click‘, (e) => { let request = new XMLHttpRequest() r