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

标签 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' 。不知道为什么我尝试传递的参数都没有使其成为服务器端。我非常确定参数没有到达服务器,尽管请求似乎可以毫无问题地发送和接收。

最佳答案

如果您设置 x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded",

XMLHttpRequest.send() 不接受 javascript/JSON 对象)

您应该按照此处提到的方式格式化为 urlencoded 变量:

Query-string encoding of a Javascript Object

或像另一个建议的答案一样使用x.setRequestHeader("Content-Type", "application/json")

另外:

a.t==="post" 应该是 a.t==="POST" 因为它不会因为区分大小写检查而更改请求 header 。

完整的工作代码(带有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);
    }
});

关于javascript - Ajax - 参数未传递 - 没有 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13020126/

相关文章:

javascript - 通过单击动态创建的引导 Accordion 内的链接发送 AJAX 请求

ruby - 接受参数作为单个对象或对象数组

python - 如何在Python类中将方法名称作为参数传递

javascript 将数组项添加到表单值

javascript - 为什么格式化程序在片段 xml 中不起作用?

javascript - 如何在 ruby​​ on rails 中对 onclick-javascript 调用操作

jquery - 如何从 jquery 脚本将 JSON 响应获取到变量中

ios - 如何有效地设置http body请求?

javascript - 使用 JSON 对象的超链接创建 HTML 表

javascript - 从回调函数内部发送一个值来表达路由器