api接口中ajax数据请求与数据返回的小坑

AJAX 可以使网页实现异步更新,XMLHttpRequest 是 AJAX 的基础,大部分浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject),XMLHttpRequest对象基于HTTP协议用于在后台与服务器交换数据。
HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据,这里主要说 POST 提交数据的方式。HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。
数据发送出去,需要服务端解析,一般服务端语言如 php、python 等,以及它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以说到 POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分。Cntent-Type有以下常见4种类型:
(1) application/x-www-form-urlencoded
这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。
(2)multipart/form-data
这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 form 的 enctyped 等于这个值。
(3)application/json
现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。因为JSON的规范,数据不容易出错。
(4)text/xml
它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。

这里需要注意的是在调用某个接口是,一定要注意接口请求的方式,如果是post,对应的enctype是什么(即请求时选择Content-Type为哪种类型)
这里以某个笑话接口为例,这里客服端为jquery的ajax,服务端没有展示:
(1)默认Content-Type 为application/x-www-form-urlencoded:

        $.ajax({
           type: ‘post‘,
            url: ‘http://route.showapi.com/jiekou‘,
            dataType: ‘json‘,
            data: {
                "showapi_appid": ‘666666‘, //这里需要改成自己的appid
                "showapi_sign": ‘67596029af7b4cb8bc7afe1c6ffd2333‘,  //这里需要改成自己的应用的密钥secret
                "page":"1",
                "maxResult":"20"

            },

            error: function(XmlHttpRequest, textStatus, errorThrown) {
                alert("操作失败!");
            },
            success: function(result) {
                console.log(result) //console变量在ie低版本下不能用
                alert(result.showapi_res_code)
            }
        });

在chorme中调试显示:

提交的原始数据

(2)content-type:application/json

var jsonstr={
"showapi_timestamp": formatterDateTime(),
"showapi_appid": ‘66666‘, //这里需要改成自己的appid
"showapi_sign": ‘67596029af7b4cb8bc7afe1c6ffd2333‘, //这里需要改成自己的应用的密钥secret
"page":"1",
"maxResult":"20"
}
$(function(){
$(‘#create-user‘).click(function(){
$.ajax({
type: ‘post‘,
url: ‘http://route.showapi.com/341-1‘,
dataType: ‘json‘,
data: JSON.stringify(jsonstr), //转换为json字符串
contentType:"application/json",
error: function(XmlHttpRequest, textStatus, errorThrown) {
alert("操作失败!");
},
success: function(result) {
console.log(result) //console变量在ie低版本下不能用
alert(result.showapi_res_code)
}
});
});

在chorme中调试显示:

客服端提交的原始数据:

补充知识点:
JSON字符串与JSON对象的区别
JSON对象:

var str2 = { "name": "cool", "sex": "man" };

JSON字符串:

var str1 = ‘{ "name": "haha", "sex": "woman" }‘;

js中如何转换:
1、JSON字符串转换为JSON对象

var obj = eval(‘(’ + str1+ ‘)’);//eval()函数是js自带方法
var obj = JSON.parse(str1); //浏览器支持的转换方式
var obj = $.parseJSON( str1);//jQuery方式
var obj = str1.parseJSON();//引用json.js

2、JSON对象转换为JSON字符串

var s=JSON.stringify(str2); //浏览器支持的转换方式
var s=str2.toJSONString(); //引用json.js

原文地址:http://blog.51cto.com/13238147/2126597

时间: 2024-11-12 05:40:58

api接口中ajax数据请求与数据返回的小坑的相关文章

javaweb局部刷新-ajax异步请求springMVC显示返回的jsp内容,代替iframe

在jsp上要引入jquery <script src="<%=request.getContextPath()%>/js/jquery_ui/jquery.js"></script> 在js中发起请求 function get(p) { var patch="show"+p; $.ajax({ //这是$.ajax()方法 type:"POST", url:patch, //路径可以用相对路径,起点以此方法所在

获取到ajax异步请求的数据的方法

// 通过GPS坐标取城市名 function getCityNameByLocation(lng, lat, callback) { // 参考:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding $.ajax({ url: '//api.map.baidu.com/geocoder/v2/', type: 'GET', data: { ak: 'eNb809Xt5UBLLxCGKkmj6IOdEf

Ajax异步请求PHP数据

来源:http://www.ido321.com/1138.html 接到了老师的一个作业,实现的布局如图: 如果输入了科室ID,科室名字只显示与ID对应的,若没有输入,则显示全部,然后根据I科室名字的值,在所属大科中的文本框自动显示科室名字所在的大科.例如:选择了心血管内科,则在所属大科显示内科. 主要代码如下: 根据ID请求科室 function showHint(str) { var xmlhttp; if (window.XMLHttpRequest) {// IE7+, Firefox

一套非常标准的数据请求和数据展示代码的模板

package com.anzi.jmsht.ui; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.json.JSONObject; import com.anzi.jmsht.AppException;

Ajax请求数据与删除数据后刷新页面

1.ajax异步请求数据后填入模态框 请求数据的按钮(HTML) <a class="queryA" href="javascript:void(0)" onclick="query(${register.id})"> <span class="glyphicon glyphicon-search"></span></a>  ajax异步请求数据后给id为queryInfo的模态

ajax 跨域获取数据jsonp使用

昨天帮同事从其他服务器传过来的json数据进行处理,遇到该问题.开始我的思路是用ajax直接请求把数据弄出来就OK了,然而出错了.原因是我使用的ajax 返回类型为json,默认ajax阻止跨服获取数据的.结合其他博文,ajax的dataType使用jsonp来解决此问题.开始觉得jsonp与json的使用类似,一步步的写着代码,如下: $.ajax({ type:'get', async:false, url:'http://112.11.131.238/nanhunongjing/GetCo

简单AJAX请求JSon数据

Ajax 全名为Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). 它是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 在传统方法中,当我们需要向服务器请求数据时,浏览器需要等待该请求完成之后才能够进行下一步的操作,而在此之前是不能够对网页进行其他的操作,如果因请求的数据过大或者网络延迟等原因而造成的等待服务器响应的时间过久,无疑会使得用户的体验感降低,甚至有可能直接导致程序挂起. 而如果我们采用AJax技术,则可以避免这种

Vue--axios:vue中的ajax异步请求(发送和请求数据)

一.使用axios发送get请求 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv=&q

Vue--axios:vue中的ajax异步请求(发送和请求数据)、vue-resource异步请求和跨域

跨域原理: 一.使用axios发送get请求 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-eq