2017-08-16 116 views
2

我使用Spring Boot,並且有一點我不明白。 假設我有一個model,在控制器的方法中創建,註釋@ResponseBody註釋。 我必須在這個模型中放置2個變量,一個String和一個int,我必須使用它來在js文件中設置2個全局變量;這個設置是在ajax函數成功的情況下完成的。因此,爲了保持一致性,我們假設我的全局變量是global1global2;並且放入模型中的變量是String aint b;在這種情況下,什麼是必須happend是:使用Spring Model屬性來設置js變量

$.ajax({ 
     ...<url, method and other actions here>... 
     success: function(){ 
       global1 = String a; 
       global2 = int b; 
     } 

我的疑問是3:

  1. 我怎麼可能把變量String aint b模型裏面?我應該使用model.addObject()還是最好創建一個Modelmap對象,用ab填充這個對象,然後將其放入模型中?這兩種方法之間有什麼區別?

  2. 在ajax函數中,當我有success: function()時,我應該給哪個參數輸入function()

  3. 在成功函數裏面,如何使用模型數據來設置全局變量?我可以用什麼語法來執行此操作?換句話說,當我有我的模型時,如何訪問其變量並用於執行global1 = String aglobal2 = int b

回答

1

您可以使用Model對象,並使用addAttribute方法爲每一個對象,你必須成功的AJAX功能。每年春天方法,你可以添加Model對象,例如:

@RequestMapping(value="value", method = RequestMethod.POST) 
    public @ResponseBody String yourMethod(@RequestParam(value="yourParam") String yourParam, 
         Model model){ 
    String a = "Your String"; 
    int b = 456; 

    model.addAttribute("myString", a); 
    model.addAttribute("myInt", b); 

    return ""; 
} 

成功函數必須帶有一個參數來聲明,這是響應。這裏面的參數,你會發現你的模型對象(myStringmyInt)的添加參數:

success: function(response){ 
      // response.myString will be "Your String" 
      // response.myInt will be 456 
     } 
+1

這個作品完美。非常感謝,也爲編輯! –

1

一般:清潔方法是使用$("form").serialize();在AJAX的數據它使param1=param1value&param2=param2value 和使用@ModelAttribute className className拿回來,但是在編輯中你可能會遇到許多問題,例如checkBox或日期或單選按鈕自動值檢測,所以我建議你使用spring形式的後端並傳遞迴結束對象並放棄Ajax,如果可以的話!同樣使用@ResponseBody你應該在客戶端做出json對象並且在服務器上得到這樣的@RequestBody className className,並且我認爲json方法在客戶端開發中花費太多時間,在客戶端的spring中特別在Ajax中沒有任何能力,所以對於Ajax我更喜歡要用thymleaf片段加載代替jquery AJAX,在這種方法中你甚至可以使用Thymleaf對象後退命令地形。 但你的問題1,如果您發送的JSON使用@RequestBody並得到這樣的模式:

@RequestMapping(value = "/", method = RequestMethod.POST) 
public ResponseEntity<Car> update(@RequestBody Car car) { 
    ... 
} 

只是@ResponseBody支持傑克遜的自動支持對象,所以你應該只發回的對象,但是你可以發送回AJAX方法的狀態使用響應實體它是包裝的數據和HTML的狀態是在INT這樣:

return new ResponseEntity<Car>(car, HttpStatus.OK); 

return new ResponseEntity("done", HttpStatus.OK); 

2-i的F使用jQuery的做功能將得到200 201等成功值 ,做會acitvated您可以通過

.done(function(data) { 
    alert("$.get succeeded"); }); 

3-得到的數據一般回來的數據是JSON的列表,你應該的foreach,並得到每個項目的JSON對象和點開放等item.prop

+0

一個好的和完整的迴應;謝謝! –