2015-08-18 53 views
3

我想提交一个POST请求,同时在其他参数中传递一个URL。 我有以下脚本,但它不起作用。XMLHttpRequest POST参数编码

var params = "param1="+param1_value+"&url="+url_value; 

var xhr = new XMLHttpRequest(); 
xhr.open("POST", action_url, true); 
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xhr.onreadystatechange = function(){ 
    if(xhr.readyState == 4 && xhr.status == 200){ 
    console.log("Done"); 
    } 
} 
xhr.send(params); 

假设url_value是这样的:

https://www.domain.com/blah?param=&email=domain%40email%2Ecom&blah=1234 

什么是错这个脚本?

+0

http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object –

回答

1

看看这个问题/答案 - Should I URL-encode POST data?

url_value你的样品值使用HTML Entity Code。由于值中有&符号,因此它将作为多个值发送。你可能需要到URL编码,以便它看起来像这样

https%3A%2F%2Fwww.domain.com%2Fblah%3Fparam%3D%26email%3Ddomain%40email.com%26blah%3D1234

+0

)所描述的那样。我认为这个问题与编码有关好吧,但是,我只是编码像你所建议的网址,但什么都没有.. –

+0

当你说“什么都没有”是什么意思?请求没有通过?你的服务器没有收到预期的数据? –

+0

请求没有经过.. –

0

尝试访问其他域/网站时可能遇到问题。接收方的返回消息中必须包含Access-Control-Allow-Origin标头。

您或许可以在this answer找到您的解决方案。

+0

假设“访问控制_Allow_Origin”不存在,我将能够发送一个HTML表单与相同的参数到相同的域名/网站?如果我创建这个html表单,请求成功。问题出在这个XMLHttpRequest上。 –

+0

是的,你可以。尽管我会推荐你​​使用jQuery,因为你可以使用'$('form')。serialize()'来通过'xhr.send()'。虽然我认为使用jQuery的'$ .ajax()'函数会更好,就像[[here](http://api.jquery.com/jquery.ajax/) – LaVomit

0

你缺少报价至URL字符串值,提醒其参数如下

VAR PARAMS =“参数1 ='” + “param1_value +”'& url ='“+ url_value +”'“;