html - 从 HTML 到不同服务器的持续 POST 请求

标签 html json forms rest post

我想创建一个 HTML 页面,它提供一个按钮(链接、其他一些可点击的元素等),当按下该按钮时,它会向特定的常量服务器发送特定的常量 POST 请求。我需要发布的值是一个特定的常量 JSON 编码值 ({"key":"value"}),因此对于 HTTP 它只是一个非常短的常量字符串。

我必须使用的值和 URL 常量。为了让事情发生,我必须准确地发送这个常量 POST 请求。无需参数化此请求或“设置值”或类似内容。此外,我没有参数 名称或类似名称。我不能发送带有值为 JSON 编码值的参数的参数列表,但我必须发送 JSON 编码值本身。完整的 POST 请求可能如下所示:

POST /post/path/to/action HTTP/1.1
Host: the.specific.server
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

{"key":"value"}

(不是 parameter={"key":"value"} 或与正文类似!)

服务器不在我的权限之下,而是我想使用的服务。

使用纯 shell 意味着我可以使用 curl 非常简单地完成此操作:

curl http://the.specific.server/post/path/to/action -d '{"key":"value"}'

我想象的是这样的

<button url="http://the.specific.server/post/path/to/action"
        value="{%22key%22:%22value%22}">visible text</button>

但我发现没有合适的。

基于类似 this 的问题或 thisthis我尝试了多种类似这样的方法:

<form method="POST" action="http://the.specific.server/post/path/to/action">
  <input type="text" id="key" key="value">value</input>
  <button type="submit" value="{%22key%22:%22value%22}">visible text</button>
</form>

有或没有输入字段、按钮、其他参数、其他值等,但在按下时最终没有向服务器发送任何有用的东西。充其量我得到了一些也在传输参数名称的东西(因此有效负载不仅仅是 Json 编码的值)。

我想我只是遗漏了一些基本的东西 :-}

最佳答案

HTML 无法从表单生成 JSON。您需要在此处使用 AJAX 请求来实现这一点。

使用 jQuery 可能是这样的:

$.ajax({
  type: 'POST',
  url: 'http://the.specific.server/post/path/to/action',
  data: '{"key":"value"}',
  success: function() {
    // Successful response received here
  },
  dataType: 'json',
  contentType : 'application/json'
});

这将在单击按钮或链接时触发,如下所述:

$('#myButtonId').click(function() {
  $.ajax({
    (...)
  });
});

这可以在包含 jQuery 库之后放在页面的 script 中,如下所述:

<html>
  <head>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    <script type="text/javascript">
      // Waiting for the DOM to be loaded
      $(document).ready(function() {
        $('#myButtonId').click(function() {
          // When button is clicked
          $.ajax({
            (...)
          });
        });
      });
    </script>
    <body>
      <button id="myButtonId">CLICK ME</button>
    </body>
  </head>

已编辑

以下是使用原始 JavaScript API 发送 HTTP 请求的方法:http://www.quirksmode.org/js/xmlhttp.html .

我修改了这段代码以适用于您的用例:

function sendRequest(url, callback, postData, contentType) {
    var req = createXMLHTTPObject();
    if (!req) return;
    var method = (postData) ? "POST" : "GET";
    req.open(method,url,true);
    req.setRequestHeader('User-Agent','XMLHTTP/1.0');
    if (postData) {
        if (contentType) {
            req.setRequestHeader('Content-type', contentType);
        } else {
            req.setRequestHeader('Content-type',
                  'application/x-www-form-urlencoded');
        }
    }
    req.onreadystatechange = function () {
        if (req.readyState != 4) return;
        if (req.status != 200 && req.status != 304) {
            return;
        }
        callback(req);
    }
    if (req.readyState == 4) return;
    req.send(postData);
}

var XMLHttpFactories = [
    function () {return new XMLHttpRequest()},
    function () {return new ActiveXObject("Msxml2.XMLHTTP")},
    function () {return new ActiveXObject("Msxml3.XMLHTTP")},
    function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

function createXMLHTTPObject() {
    var xmlhttp = false;
    for (var i=0;i<XMLHttpFactories.length;i++) {
        try {
            xmlhttp = XMLHttpFactories[i]();
        } catch (e) {
            continue;
        }
        break;
    }
    return xmlhttp;
}

要执行您的请求,只需使用函数sendRequest:

sendRequest(
  'http://the.specific.server/post/path/to/action',
  function() {
    // called when the response is received from server
  },
  '{"key":"value"}',
  'application/json');

希望对你有帮助, 蒂埃里

关于html - 从 HTML 到不同服务器的持续 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32938766/

相关文章:

javascript - 基于特定列数据创建选择 - 使用 javascript

java - 无法使用 jackson 库匹配包含正斜杠 (/) 的节点

jquery - 如何根据单击的提交按钮选择父表单?

jsp - 如何用servlet派发的数据填充jsp中的html表单?

jquery - google prettify 无法在从 jquery 加载调用的 block 中工作

javascript - 复选框结构,如果选中单个子复选框,则应自动选中父复选框

jquery - 使用 jQuery 删除字符串中的所有空格

javascript - 访问 .json 文件中的字段

php - 获取 json 数组的正确形式语法和相关 jquery 是什么

javascript - Rails 3 表单问题 : How to create a "select" with "Add New ..." option?