function ajax() {
var ajaxData = {
type: arguments[0].type || "GET",//提交方式,默认get
url: arguments[0].url || "",//路径
async: arguments[0].async || "true",//是否异步,默认异步
data: arguments[0].data || null,//参数
dataType: arguments[0].dataType || "text",//类型
contentType: arguments[0].contentType || "application/x-www-form-urlencoded",
beforeSend: arguments[0].beforeSend || function() {},
success: arguments[0].success || function() {},
error: arguments[0].error || function() {}
}
ajaxData.beforeSend()//默认执行before方法
var xhr = createxmlHttpRequest()//创建request对象
xhr.responseType = ajaxData.dataType
xhr.open(ajaxData.type, ajaxData.url, ajaxData.async)
xhr.setRequestHeader("Content-Type", ajaxData.contentType)
xhr.send(convertData(ajaxData.data))
xhr.onreadystatechange = function() {
if(xhr.readyState == 4) {
if(xhr.status == 200) {
ajaxData.success(xhr.response)
} else {
ajaxData.error()
}
}
}
}
function createxmlHttpRequest() {
if(window.ActiveXObject) {//判断IE
return new ActiveXObject("Microsoft.XMLHTTP")
} else if(window.XMLHttpRequest) {
return new XMLHttpRequest()
}
}
function convertData(data) {
if(typeof data === 'object') {
var convertResult = ""
for(var c in data) {
convertResult += c + "=" + data[c] + "&"
}
convertResult = convertResult.substring(0, convertResult.length - 1)
return convertResult
} else {
return data
}
}
var json = ajax({
url: "http://192.168.10.22:8080/xxx",
dataType: "json",
success: function(msg) {
var date=msg
if(date.stateCode=200){
var result=date.dataList
}
}
},
error: function() {
console.log("error")
}
})
以上是原生js实现,也可以引入jquery 使用$.post()
使用AngularJS通过POST传递参数还是需要设置一些东西才可以!
1、不能直接使用params
例如:
[javascript] view plain copy
$http({
method: "POST",
url: "http://192.168.2.2:8080/setId",
params: {
cellphoneId: "b373fed6be325f7"
}
}).success()
当你这样写的时候它会把id写到url后面:
[javascript] view plain copy
http://192.168.2.2:8080/setId?cellphoneId=b373fed6be325f7"
会在url后面添加"?cellphoneId=b373fed6be325f7",查了些资料发现params这个参数是用在GET请求中的,而POST/PUT/PATCH就需要使用data来传递2、直接使用data
[javascript] view plain copy
$http({
method: "POST",
url: "http://192.168.2.2:8080/setId",
data: {
cellphoneId: "b373fed6be325f7"
} }).success()
这样的话传递的,是存在于Request Payload中,后端无法获取到参数
这时发现Content-Type:application/jsoncharset=UTF-8,而POST表单请求提交时,使用的Content-Type是application/x-www-form-urlencoded,所以需要把Content-Type修改下!
3、修改Content-Type
[javascript] view plain copy
$http({
method: "POST",
url: "http://192.168.2.2:8080/setId",
data: {cellphoneId: "b373fed6be325f7"},
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).success()
这时数据是放到了Form Data中但是发现是以对象的形式存在,所以需要进行序列化!
4、对参数进行序列化
[html] view plain copy
$http({
method: "POST",
url: "http://192.168.2.2:8080/setId",
data: {cellphoneId: "b373fed6be325f7"},
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
transformRequest: function(obj) {
var str = []
for (var s in obj) {
str.push(encodeURIComponent(s) + "=" + encodeURIComponent(obj[s]))
}
return str.join("&")
}
}).success()