api介面中ajax資料請求與資料返回的小坑

來源:互聯網
上載者:User

標籤:ajax資料請求   JSON對象和字串   

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

api介面中ajax資料請求與資料返回的小坑

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.