2012-10-22 44 views
0

不幸的是,我没有得到任何东西,只是看起来像jQuery结果。我正在寻找通过AJAX传递参数的正确方法,请勿使用旧的浏览器回退,但不需要库。如果有另一个线程,我已经错过了,请链接=)Ajax - 参数不通过 - 没有jQuery

我使用$,但它是一个自定义对象/不管,而不是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'。不知道为什么我尝试传递的参数都没有变成服务器端。我非常确定这些参数没有打到服务器上,尽管请求似乎没有问题地发送和接收。

+0

你的代码进行模糊处理使得它的痛苦,试图了解这意味着什么的事实。如果您需要帮助,请使您的代码可读。如果你使用它,除了你以外,没有人能够维护那些代码。每天。永远。 – PatrikAkerstrand

回答

1

XMLHttpRequest.send()如果您设置了x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"),则不接受javascript/JSON对象。

你应该格式化为url编码变量这里提到:

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); 
    } 
}); 
+0

谢谢!对“POST”有很好的解释和良好的理解! –

1

尝试设置请求头

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

检查this出来。

+0

感谢您的链接! –