发布不带ajax或表单的JSON数据

Post JSON data without ajax or form

本文关键字:JSON 数据 表单 布不带 ajax      更新时间:2023-09-26

我想要发布一个json对象。我相信我很接近,但数据发送不正确。

数据是正确格式化的json字符串,它可以正确地使用ajax。但是,页面需要根据RESTapi-im请求进行重定向。显然,使用ajax不会发生这种情况。

var data = JSON.stringify(myJsonObject);
$('<form enctype="application/json" action="/projects" method="POST">' + 
  '<input type="hidden" name="json" value="' + data + '">' +
  '</form>').submit();

我认为您需要转义字符串化的JSON。

var data = $(JSON.stringify(myJsonObject);
function escapeHtml(text) {
  var map = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#039;'
  };
  return text.replace(/[&<>"']/g, function(m) { return map[m]; });
}
$('<form enctype="application/json" action="/projects" method="POST">' + 
  '<input type="hidden" name="json" value="' + escapeHtml(data) + '">' +
  '</form>').submit();

您的JSON字符串包含引号,它会打断html。

编辑:如果您不关心隐藏输入中的转义(字符串)是否为可读格式,也可以使用转义(string)。然后您可以使用unescape(string)返回json字符串。这样,您也可以使用相同的函数将其传递给get请求;)

{name: "test"}
==>  %7B%22name%22%3A%22test%22%7D 

示例:https://stackoverflow.com/a/17696884/986160

Curl怎么样?你可以这样发布数据。你需要一个ajax调用PHP函数:

function sendData($json){
    $url = 'wwww.exemple.com';

    //setting the curl parameters.
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    // Following line is compulsary to add as it is:
    curl_setopt($ch, CURLOPT_POSTFIELDS,$json);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300);
    $data = curl_exec($ch);

    curl_close($ch);

    return $data;


}

此函数发送一个json并从API获取返回。

您可以这样做,但id会重定向页面。另一种解决方案是使用$.Ajax或$.post

var form = $('<form enctype="application/json" action="/projects" method="POST">' + 
  '<input type="hidden" name="json" value="' + data + '">' +
  '</form>');
form.submit();