【问题标题】:JSON POST Request - JSON data, How to do a post request with data in JSON formatJSON POST 请求 - JSON 数据,如何使用 JSON 格式的数据进行发布请求
【发布时间】:2013-07-29 11:47:44
【问题描述】:

我想发布以下数据:

{
  "contactsync":
      { "rev":4,
        "contacts":[
                   { "fields": [
                                {
                                   "value":
                                      {
                                        "givenName":"dfgheeej",
                                        "familyName":"ffftestfff"
                                      },
                                   "type":"name",
                                   "flags":[],
                                   "op":"add"
                                },
                                {
                                   "value":"fffffff",
                                   "type":"nickname",
                                   "flags":[],
                                    "op":"add"
                                },
                                {
                                   "value":"fffff@fffff.com",
                                   "type":"email",
                                   "flags":[],
                                   "op":"add"
                                }
                            ],
                     "categories":[],
                     "op":"add"
                   }
       }
}

到一个网址。 (如:site.com/anything/add?format=json&wssid=t4764.444&wssid=some_value&windowid=&r=776566756)

我如何通过可能的 javascript 将上述数据发布到 url? (我想为它创建一个包含脚本的 html 文件。)

这一切都不会发生在同一台服务器上,我想将数据从另一台服务器发布到另一台。

【问题讨论】:

  • @HeinA.Grønnestad :我尝试了 XMLHTTPREQUEST 模式和正常的表单提交方法..但这不起作用!
  • 我在 php 和 javascript 之间使用了 json,但反过来。我认为这可能有点挑剔。无论如何,您是否尝试过在整个 Json 结构周围加上双引号并转义其他双引号,然后在 php 中再次解码 json?
  • 现代浏览器实现JSON.stringify(),它允许您获取对象的字符串表示,但是从架构的角度来看,我不确定使用这种方法是否是最佳解决方案。
  • @DanielvanDommele :不,我没有尝试过。你能发布一个示例来演示如何做到这一点吗?

标签: php javascript json post httprequest


【解决方案1】:

如果您的脚本将在同一台服务器上,您可以使用 ajax,服务器支持 CORS 或服务器支持 JSONP。使用 jQuery 将是:

var data = {"contactsync":{"rev":4,"contacts":[{"fields":[{"value":{"givenName":"dfgheeej","familyName":"ffftestfff"},"type":"name","flags":[],"op":"add"},{"value":"fffffff","type":"nickname","flags":[],"op":"add"},{"value":"fffff@fffff.com","type":"email","flags":[],"op":"add"}],"categories":[],"op":"add"}]}};
var url = 'site.com/anything/addformat=json&wssid=t4764.444&wssid=some_value&windowid=&r=776566756';

$.post(url, JSON.stringify(data), function(response) {

});

如果您不能使用 ajax,您需要在 php 中创建一个代理(只需将 json 传递到远程地址并打印响应),例如:

function post($url, $data) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    return curl_exec($ch);
}

function get_raw_post_data() {
    if (isset($GLOBALS['HTTP_RAW_POST_DATA'])) {
        return $GLOBALS['HTTP_RAW_POST_DATA'];
    } else {
        return file_get_contents('php://input');
    }
}

$url = "site.com/anything/addformat=json&wssid=t4764.444&wssid=some_value&windowid=&r=776566756";

echo post($url, get_raw_post_data());

然后你在同一台服务器上使用你的脚本的远程站点的 url。

【讨论】:

  • 我想在其他远​​程服务器上发布数据(不是同一台服务器)。
  • @Lady 然后使用我写的这个 php 代理。
猜你喜欢
  • 1970-01-01
  • 2017-11-16
  • 2011-11-27
  • 2022-01-23
相关资源
最近更新 更多