【问题标题】:pass html form data to json php string将 html 表单数据传递给 json php 字符串
【发布时间】:2015-04-12 18:50:12
【问题描述】:

我已经能够使用这种格式执行解析以将数据发布到我的 api:

工作样本:

    <?php

$appId = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX';
$private_token = 'XXXXXXXXXXXXXXXXXXX';
$geo_post = "/api/v1/geofence/";

$name = "Home";
$latitude = 38.646322;
$longitude = -121.185837;
$radius = 50;


$data = array(
  "name" => $name,
  "location" => 
  array( "latitude" => $latitude, "longitude" => $longitude),
  "matchRange" => $radius
);

$data_string = json_encode($data);                                                                                   

$ch = curl_init();
$headers = array(
'Content-Type:application/json',
'Authorization: Basic '. base64_encode($appId.":".$private_token) // <---
);

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_URL, 'https://admin.plotprojects.com' . $geo_post );                                                                            
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      

$content = trim(curl_exec($ch));
curl_close($ch);

//print_r($content);

?>

错误信息示例:

<?php
if (isset($_REQUEST['add_new'])){

$appId = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$private_token = 'XXXXXXXXXXXXXXXXXXXXXXX';
$geo_post = "/api/v1/geofence/";

$name = $_GET['db_geofencename'];
$latitude = $_GET['db_latitude'];
$longitude = $_GET['db_longitude'];
$radius = $_GET['db_radius'];


$data = array(
  "name" => $name,
  "location" => 
  array( "latitude" => $latitude, "longitude" => $longitude),
  "matchRange" => $radius
);

$data_string = json_encode($data);                                                                                   

$ch = curl_init();
$headers = array(
'Content-Type:application/json',
'Authorization: Basic '. base64_encode($appId.":".$private_token) // <---
);

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_URL, 'https://admin.plotprojects.com' . $geo_post );                                                                            
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      

$content = trim(curl_exec($ch));
curl_close($ch);

print_r($content);

?>

如您所见,我在 $data 数组中使用了一个字符串,因此我试图从表单中捕获信息并将其传递给 $data 数组,但如果我使用 $_GET 或 $_POST 我最终得到一条错误消息:

{ "success": false, "errorMessage": "请求内容格式错误:\n预期字符串为 JsString,但得到了 null", "errorCode": "BadRequest" }

我做错了什么?

【问题讨论】:

  • 请发布 print_r($data_string = json_encode($data)); 的输出
  • 不明白你的意思?如果谈论结果是什么,你可以在这里看到工作:mygeofy.com/api/add_geo.php
  • 嗨,想知道传递了哪些值以及传递给$data_string的json_encode函数的字符串值。所以换行: $data_string = json_encode($data);通过 print_r($data_string = json_encode($data));die;并在此处粘贴输出作为评论。
  • 错误消息明确指出问题出在请求内容中,所以想看看推送到服务的内容。
  • 我试图传递的数据来自表单域:

标签: php json api post


【解决方案1】:

所以我能想到的最好的是将您的 $latitude 和 $longitude 转换(类型转换)为浮点数。不要依赖 php 自动类型转换,因为有时它会在内部将其保留为字符串,我猜 api 想要 $latitude 和 $lon... 作为浮点数而不是字符串。

【讨论】:

    猜你喜欢
    • 2020-05-13
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多