【问题标题】:XMLHttpRequest POST parameter encodingXMLHttpRequest POST 参数编码
【发布时间】:2015-11-11 00:23:10
【问题描述】:

我想在传递 url 和其他参数的同时提交一个 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

这个脚本有什么问题?

【问题讨论】:

标签: javascript ajax post xmlhttprequest


【解决方案1】:

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

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

【讨论】:

  • 假设Access-Control_Allow_Origin 不存在,我能否将具有相同参数的html 表单发送到同一个域/网站?因为如果我创建这个 html 表单,请求就成功了。问题出在这个 XMLHttpRequest 上。
  • 是的,你可以。虽然我会推荐你​​使用 jQuery,因为这样你就可以使用$('form').serialize() 来传递xhr.send()。虽然我认为使用 jQuery 的 $.ajax() 函数会更好,就像描述的 here
【解决方案2】:

看看这个问题/答案 - 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

【讨论】:

  • 我认为问题也与编码有关,但是我只是按照您的建议对 url 进行了编码,但还没有..
  • 当你说“还没有”是什么意思?请求没有通过吗?您的服务器没有收到预期的数据吗?
  • 我将您的代码直接复制到了我的控制台中,只要设置了param1_valueurl_valueaction_url 变量,它就可以正常工作。您能否分享任何错误或有关问题的更多信息?
  • 此代码在 google chrome 扩展程序中运行。如果提交成功,将创建一个 cookie。所以,我要找的是饼干。我看不到任何错误..
【解决方案3】:

您缺少对url字符串值的引用,警告参数字符串如下

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2010-09-12
    • 2011-05-15
    • 2017-11-24
    • 1970-01-01
    相关资源
    最近更新 更多