2014-03-25 20 views
0

我有这个函数执行一个Ajax POST:

function consultaruserID(){ 
    if (window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
     } else { // code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

var userID = document.getElementById('userID').value; 
var captcha = document.getElementById('captcha').value; 
var token = encodeURIComponent(cToken); 
    var params = "userID="+userID + "&captcha="+captcha + "&token="+token; 


    xmlhttp.open('POST','/sys/getdata.php',false); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlhttp.setRequestHeader("Content-length", params.length); 
    xmlhttp.setRequestHeader("Connection", "close"); 
    xmlhttp.send(params); 


    alert (xmlhttp.responseText); 

} 

注意字符串令牌长约2000和涉及到一些特殊字符。因此我用encodeURIComponent(cToken);

getdata.php处理所有的数据并返回一个字符串。工程100%。

现在,使用下面的代码在发布后返回SUCCESS,但它不会给我带来预期来自getdata.php的字符串。

$.post("/sys/getdata.php", 
    {userID: $('#userID').val(), 
    captcha: $('#captcha').val(), 
    token: encodeURIComponent(cToken) 
    }, 
    function(data,status){ 
    alert("Data: " + data + "\nStatus: " + status); 
    } 
); 

关于getdata.php我调试了来自两个方法的ajax的$ _POST。这两种方法似乎都正确发布。然而,这个代码令牌的功能(不是我的)会以某种方式从ajax中拒绝它。

我在这里错过了什么吗? cToken的

样品:

var cToken='RadStyleSheetManager1_TSSM=&RadScriptManager1_TSM=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3a33363de7-7c08-435e-ab35-682b2ed2c688%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%3aen-US%3a4701e229-f1c8-4ec4-9c40-b2d233d95d5d%3a16e4e7cd%3af7645509%3a22a6274a%3aed16cbdc%3a11e117d7&__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwUKLTc1OTk5NDIwOA8WAh4IcHJldkdVSUQFJDlkYWRiODRjLWYyN2YtNDA2Yi04MjE4LWM3MGI4NzY4MmI1NxYCAgMPZBYCAgUPFCsAAw8WBh4FV2lkdGgbAAAAAADAckABAAAAHgZIZWlnaHQbAAAAAADAUkABAAAAHgRfIVNCAoADZBYCHgtDdXJyZW50R3VpZAUkOWRhZGI4NGMtZjI3Zi00MDZiLTgyMTgtYzcwYjg3NjgyYjU3FCsAA2RkFgIeCk1pblRpbWVvdXQCAxYCAgEPZBYIZg9kFgJmD2QWBmYPDxYKHwIbAAAAAAAASUABAAAAHwEbAAAAAACAZkABAAAAHghDc3NDbGFzc2UeCEltYWdlVXJsBVN%2BL1RlbGVyaWsuV2ViLlVJLldlYlJlc291cmNlLmF4ZD90eXBlPXJjYSZndWlkPTlkYWRiODRjLWYyN2YtNDA2Yi04MjE4LWM3MGI4NzY4MmI1Nx8DAoIDZGQCAQ8PFgIeBFRleHQFEUdlcmFyIG5vdmEgaW1hZ2VtZGQCAg8WBB4JaW5uZXJodG1sBQVPdXZpch4EaHJlZgVXfi9UZWxlcmlrLldlYi5VSS5XZWJSZXNvdXJjZS5heGQ%2FdHlwZT1jYWgmYW1wO2d1aWQ9OWRhZGI4NGMtZjI3Zi00MDZiLTgyMTgtYzcwYjg3NjgyYjU3ZAIBDw8WCh8CGwAAAAAAAElAAQAAAB8BGwAAAAAAgGZAAQAAAB8GZR8HBVN%2BL1RlbGVyaWsuV2ViLlVJLldlYlJlc291cmNlLmF4ZD90eXBlPXJjYSZndWlkPTlkYWRiODRjLWYyN2YtNDA2Yi04MjE4LWM3MGI4NzY4MmI1Nx8DAoIDZGQCAg8WBh8JBQVPdXZpch8KBVd%2BL1RlbGVyaWsuV2ViLlVJLldlYlJlc291cmNlLmF4ZD90eXBlPWNhaCZhbXA7Z3VpZD05ZGFkYjg0Yy1mMjdmLTQwNmItODIxOC1jNzBiODc2ODJiNTceB1Zpc2libGVnZAIDD2QWBGYPDxYIHwZlHglBY2Nlc3NLZXllHghUYWJJbmRleAEAAB8DAgJkZAIBDw8WBh8GZR8IBRxUeXBlIHRoZSBjb2RlIGZyb20gdGhlIGltYWdlHwMCAmRkGAIFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtSYWRDYXB0Y2hhMQULUmFkQ2FwdGNoYTEPFCsAAgUkOWRhZGI4NGMtZjI3Zi00MDZiLTgyMTgtYzcwYjg3NjgyYjU3BgAAAAAAAAAAZC71hndqclnXtz26igXAh8hMTN8v1xbnYlEz5BpnTD2e&__EVENTVALIDATION=%2FwEWAgKQq574CQLYv5ykDAZWk768pXDUic2zwz0szJjtC6%2ByEIHnfkVFizDz0zTL&RadCaptcha1_ClientState=&RadCaptcha1%24CaptchaTextBox='; 
+0

嗨,@AZevedo ...'cToken'在哪里申报/填充,它的价值是什么? –

+0

嗨!我将它发布在主题上。它在HTML HEADER中声明。 – Azevedo

+0

你不应该对'cToken'进行URI编码。 jQuery在将对象文字转换为查询字符串时会自动应用URI编码。当你说“令牌某种程度上从AJAX拒绝它”时,这意味着什么?你能够发布帖子吗?您是否从服务器脚本获得对您帖子的非200回复​​?问题实际发生在哪里? –

回答

1

你不应该URI编码cToken 。 jQuery在将对象文字转换为查询字符串时会自动应用URI编码。

+0

感谢哥们!就是这样! – Azevedo

0

你的令牌似乎含有不被正确传递额外的参数,尝试通过数据字符串:

var userID = document.getElementById('userID').value; 
var captcha = document.getElementById('captcha').value; 
var token = encodeURIComponent(cToken); 
var params = "userID="+userID + "&captcha="+captcha + "&token="+token; 

$.post("/sys/getdata.php", 
    params, 
    function(data,status){ 
    alert("Data: " + data + "\nStatus: " + status); 
    } 
);