没有jquery的javascript中的Ajax POST

时间:2014-03-27 16:00:17

标签: javascript ajax json post

我需要从服务器端使用一个JSON对象,我必须使用ajax POST在客户端(Javascript)创建一个URL。

var oReq = new XMLHttpRequest();
oReq.open("POST", url, true);
oReq.responseType = "json";
oReq.onload = function(e) {
    var jsonObj = oReq.response;
   /* ... */
}

我应该在function(e)内使用什么?

我不应该在这里使用Jquery。

2 个答案:

答案 0 :(得分:1)

您需要send()您的请求。

请参阅this (slightly adjusted) example:

var oReq = new XMLHttpRequest();

oReq.open("POST", url, true);
oReq.responseType = "json";
oReq.onload = function(e) {
  var jsonResponse = oReq.response; // not responseText
  /* ... */
}
oReq.send();

答案 1 :(得分:-1)

这是我写的一个功能&总是用于ajax请求,帖子......等等

 function ajax(a,b,e,d,f,g,c){
  // url,callback,type(get),FormData(null),uploadProgress,progress 
  c=new XMLHttpRequest;
  !f||(c.upload.onprogress=f);
  !g||(c.onprogress=g);
  c.onload=b;
  c.open(e||'get',a);
  c.send(d||null)
 }

我认为只有Chrome支持responseType='json'; 通过删除responseType='json';,您可以使用

获取json响应
JSON.parse()

这样:

JSON.parse(oReq.response)

要从此ajax调用获得响应,您可以选择3种方式

1.在我的情况下/或你的

c.response
//your
oReq.response

2.使用此

this.response // i always use this.

3.e.target

e.target.response

ajax功能说明:

此ajax函数有6个可用参数

url,callback,type(get或post),FormData(或null),uploadProgress,progress

只需要2个urlcallback(简单的获取请求)

ajax('url',function(){console.log(this.response)})
// it's better to use a function reference to avoid memory leaks
// like
function cb(){console.log(this.response)};
ajax('url',cb)

在你的情况下你使用帖子

所以你需要4个参数

urlcallbacktype(post in your case)formdata

这样:

ajax('url',callbackFunction,'post',fd);

其中fd以2种方式构建

var fd=new FormData();
fd.append('key','value');
ajax('url',callbackFunction,'post',fd);

或者您也可以发布整个表单

var fd=new FormData(document.getElementsByTagName('form')[0]);
ajax('url',callbackFunction,'post',fd);

或者您也可以添加进度事件功能

function progress(e){
 console.log(e.loaded/e.total*100)
}

上传进度相同

并且回调函数就是那样的

function callbackFunction(e){
console.log(e.target.response);
console.log(this.response);
console.log(c.response);

// without the reponsetype

console.log(JSON.parse(e.target.response));
console.log(JSON.parse(this.response));
console.log(JSON.parse(c.response))
}

如果您有任何问题,请询问。