Ajax - 参数没有传递 - 没有jQuery

时间:2012-10-22 21:24:19

标签: javascript ajax parameter-passing

不幸的是,我似乎只得到jQuery结果。我正在寻找通过AJAX传递参数的正确方法,不需要旧的浏览器回退,但请不要使用库。如果还有另一个我错过的帖子,请链接=)

我正在使用$,但它是一个自定义对象/什么,而不是jQuery。

$.ajax({
    't':'POST',
    'u':e, 
    'd':{ajax:'1'},
    's':function(data){
        console.log(data.response);
        document.getElementById('mainc').innerHTML = data.response;
    },
    'e':function(data){
        console.log(data);
    }
});

哪个电话:

$.ajax = function(a){
if(!a.u){return false;};
a.t=a.t||"GET";
typeof a.a=='undefined'?true:a.a;
a.e=a.e||function(){return false;};
a.s=a.s||function(){return true;};
var x=new XMLHttpRequest();
x.open(a.t,a.u,a.a);
x.onreadystatechange=function(){
    if(x.readyState===4){
        if(x.status===200){
            a.s(x);
        }else{
            a.e(x);
        }
    }
};
a.t==="post" ? x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") : null;
x.send(a.d);

}

x.send(a.d)应该通过{ajax:'1'}。我已经尝试了{'ajax':'1'}'ajax=1'。不知道为什么我尝试传递的参数没有任何东西使它成为服务器端。我非常确定这些参数没有命中服务器,尽管请求似乎在没有问题的情况下发送和接收。

2 个答案:

答案 0 :(得分:1)

尝试将请求标头设置为

x.setRequestHeader("Content-Type", "application/json")

检查this

答案 1 :(得分:1)

如果您设置XMLHttpRequest.send(),则

x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")不接受javascript / JSON对象。

您应格式化为urlencoded变量,如下所述:

Query-string encoding of a Javascript Object

或使用x.setRequestHeader("Content-Type", "application/json"),如建议的其他答案。

此外:

a.t==="post"应为a.t==="POST",因为它不会因为区分大小写的检查而更改请求标头。

完整的工作代码(使用urlencoded数据):

$ = {}

$.ajax = function(a){
if(!a.u){return false;};
a.t=a.t||"GET";
typeof a.a=='undefined'?true:a.a;
a.e=a.e||function(){return false;};
a.s=a.s||function(){return true;};
var x=new XMLHttpRequest();
x.open(a.t,a.u,a.a);
x.onreadystatechange=function(){
    if(x.readyState===4){
        if(x.status===200){
            a.s(x);
        }else{
            a.e(x);
        }
    }
};
a.t==="POST" ? x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") : null;
x.send(a.d);

}    

$.ajax({
    't':'POST',
    'u':'/', 
    'd':"ajax=1",
    's':function(data){
        console.log(data.response);
        document.getElementById('mainc').innerHTML = data.response;
    },
    'e':function(data){
        console.log(data);
    }
});