推薦(免費):ajax
最近寫ajax與後台傳輸資料的時候碰到了一個問題,我想ajax以json的方式把資料傳送個後台,後台用map的形式接收,然後也以map的形式傳回數據。可是一直碰到前台報(*)(@415 Unsupported media type) 不支援媒體類型錯誤,然後經過查閱資料終於解決了。這裡總結下關於ajax與後台傳輸資料的幾種方式,上面問題的解決方法在本文最後。
<code> var id = $("#id").val(); $.ajax({ type: "POST", url: "/IFTree/people/getPeopleById/"+id,//参数放在url中 success:function(data){ alert(data); }, error:function(xhr, textStatus, errorThrown) { } }); </code>
<code></p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">@RequestMapping(value = "getPeopleById/{id}") @ResponseBody public Map<String, Object> getPeopleById(@PathVariable("id") int id) { //@PathVariable("id") 如果参数名与url定义的一样注解可以不用定义("id") System.out.println(id); Map<String, Object> map = new HashMap<String, Object>(); return map; } }
<code> var id = $("#id").val(); $.ajax({ type: "POST", url: "/IFTree/people/getPeopleById", data: {id:id}, success:function(data){ alert(data.result); }, error:function(xhr, textStatus, errorThrown) { } }); </code>
<code></p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">@RequestMapping(value = "getPeopleById") @ResponseBody public Map<String, Object> getPeopleById(HttpServletRequest request,HttpServletResponse response) { int id = Integer.valueOf(request.getParameter("id")); Map<String, Object> map = new HashMap<String, Object>(); return map; }
@RequestMapping(value = "getPeopleById") @ResponseBody public Map<String, Object> getPeopleById(HttpServletRequest request,HttpServletResponse response) { int id = Integer.valueOf(request.getParameter("id")); // 这里得到的都是字符串得转换成你需要的类型 Map<String, Object> map = new HashMap<String, Object>(); return map; }
<code> var id = $("#id").val(); $.ajax({ type: "POST",//请求类型 timeout:10000, //设置请求超时时间(毫秒) async:ture,//是否为异步请求 cache:false,//是否从浏览器缓存中加载请求信息。 url: "/IFTree/people/getPeopleById", contentType: "application/json;charset=UTF-8",//提交的数据类型 data: JSON.stringify({id:id}),//这里是把json转化为字符串形式 dataType: "json",//返回的数据类型 success:function(data){ $("#name").val(data.result.name); }, error:function(xhr, textStatus, errorThrown) { } }); }); </code>
< pre></p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">@RequestMapping(value = "getPeopleById", produces = "application/json")
@ResponseBody
public Map<String, Object> getPeopleById(@RequestBody Map<String, Object> body){
System.out.println(""+body.get("id"));
People people = peopleService.getPeopleById(Integer.valueOf((String)body.get("id")));
Map<String, Object> map = new HashMap<String, Object>();
map.put("result", people);
return map;
}</pre><div class="contentsignin">登入後複製</div></div><p>
@RequestBody
此註解首先讀取request請求的正文數據,然後使用預設配置的HttpMessageConverter進行解析,把數據綁定要物件上面,然後再把物件綁定到controllor中的參數上。
@ResponseBody
該註解也是一樣的用於將Controller的方法返回的對象,通過的HttpMessageConverter轉換為指定格式後,寫入到Response對象的body資料區。
</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> <!-- spring MVC提供的适配器 spring默认加载 (如果不修改默认加载的4类转换器,该bean可不配置)-->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<!-- 该适配器默认加载以下4类转换器-->
<list>
<bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter" />
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />
<bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" />
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean><!--这里配置了json转换器支持的媒体类型-->
</list>
</property>
</bean></pre><div class="contentsignin">登入後複製</div></div><p>
ByteArrayHttpMessageConverter: 負責讀取取二進位格式的資料和寫出二進位格式的資料;
StringHttpMessageConverter: 負責讀取字串格式的資料和寫出二進位格式的資料;
ResourceHttpMessageConverter :負責讀取資源檔案和寫出資源檔案資料;
FormHttpMessageConverter: 負責讀取form提交的資料
MappingJacksonHttpMessageConverter: 格式在讀取和寫入jsonpingJacksonHttpMessageConverter
: 格式的資料;SouceHttpMessageConverter
: 負責讀取與寫入xml 中javax.xml.transform.Source定義的資料;##Jb2Root#Jaxb2Root. xml 標籤格式的資料;
AtomFeedHttpMessageConverter: 負責讀取與寫入Atom格式的資料;
RssChannelHttpMessageConverter 專案裡面我用到的只有json轉換器,所以要導入關於json的套件(maven):
<code> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.11</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.11</version> </dependency> </code>
如果有哪裡不足或錯誤的地方望提出,謝謝
_
php培訓
以上是介紹Spring中ajax與後台傳輸資料的幾種方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!