如何从 API 响应访问数据
How to access data from API response
我收到了 API 的以下回复。
[{
"BookId":"32c03594-1ecb-4f97-8453-5b28a03d26d9",
"BookName":"Book1",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"51d16696-b98a-4b3b-ac67-f36559cff70b",
"BookName":"Book2",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"7b557a75-bf5e-4c29-9f31-43a7fee77520",
"BookName":"Book3",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"c945ade5-d540-4378-9979-3842a1da396b",
"BookName":"Book4",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"814869e2-e5af-48bc-a6da-28f272366955",
"BookName":"Book5",
"Bookstatus":3,
"Country":"AU"
}]
我有一个带有下拉框的网络表单,可以选择您想要的书。
我想要发生的事情是,当您单击 提交 时,您将被转到另一个页面,在该页面上我希望能够访问 BookId
, BookName
和通过 $_POST
从第一页访问令牌。我对 BookName
没有任何问题,但不知道如何获取 BookId
和访问令牌。
这是我目前所拥有的:
请注意:访问令牌是通过页面头部的 $_GET
获得的,并分配给 $access_token
变量。
<body>
<?php
$array=json_decode($response, true);
$arr_len = count($array);//length of the array = 5
$for_len = $arr_len - 1;//length - 1
?>
<h1>CashBooks</h1>
<form action="getcoa.php" method="post">
<select name="books">
<?php
for($i=0; $i<=$for_len; $i++){
$bookname = $array[$i]["BookName"];
echo '<option value="' . $bookname . '" name="' . $bookname . '">' .
$bookname . '</option>';
};
?>
</select>
<input type="hidden" name="<?php $bookname; ?>">
<input type="hidden" name="<?php $access_token; ?>">
<input type="submit" value="Get Chart of Accounts">
</form>
</body>
对于 BookId
,我还没有想出如何处理它,所以任何建议都很好。而且我尝试使用访问令牌的方法不起作用。当我按原样单击提交时,我在 "getcoa.php page":
上收到此错误
"Notice: Undefined index: access_token in C:\wamp\www\getcoa.php on
line 6"
这是第 6 行:
$access_token = $_POST['access_token'];
仅供参考。 token部分解决了
但我认为我并不清楚我试图通过 BookId 实现的目标。在这个页面上,"USER" 唯一会看到的是一个带有 BookNames 列表的下拉菜单,他们从中 select 一个,然后单击提交按钮......在下一页上,我将调用 API 端点,但我需要 BookId 才能调用该端点。
所以 selected BookName 的 BookId 需要以某种方式发布到下一页,所以我可以在该页面上使用 $_POST 来获取 BookId 并使用它来访问所需的端点,在最终用户不知道 "BookId" 存在的情况下。
希望我已经更加清楚我要实现的目标。对不起,如果我没有开始。
在您的脚本中发现多个问题:
在select box
循环中,看如何写一个select框
https://www.tutorialspoint.com/html/html_select_tag.htm
故障:
echo '<option value="' . $bookname . '" name="' . $bookname . '">' .
$bookname . '</option>';
肯定是这样的,options
中没有name
属性
echo '<option value="' . $bookname . '">' . $bookname . '</option>';
:: 怀疑你需要通过 bookid
而不是 bookname
在输入框中,您没有 echo
变量,
而不是
<input type="hidden" name="<?php $bookname; ?>">
<input type="hidden" name="<?php $access_token; ?>">
你需要
<input type="hidden" name="bookname" value="<?php echo $bookname; ?>">
<input type="hidden" name="access_token" value="<?php echo $access_token; ?>">
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php
$response = '[{"BookId":"32c03594-1ecb-4f97-8453-5b28a03d26d9","BookName":"Book1","Bookstatus":3,"Country":"AU"},{"BookId":"51d16696-b98a-4b3b-ac67-f36559cff70b","BookName":"Book2","Bookstatus":3,"Country":"AU"},{"BookId":"7b557a75-bf5e-4c29-9f31-43a7fee77520","BookName":"Book3","Bookstatus":3,"Country":"AU"},{"BookId":"c945ade5-d540-4378-9979-3842a1da396b","BookName":"Book4","Bookstatus":3,"Country":"AU"},{"BookId":"814869e2-e5af-48bc-a6da-28f272366955","BookName":"Book5","Bookstatus":3,"Country":"AU"}]';
$array=json_decode($response, true);
$arr_len = count($array);//length of the array = 5
$for_len = $arr_len - 1;//length - 1
?>
<h1>CashBooks</h1>
<form action="getcoa.php" method="post">
<select name="books">
<?php foreach ($array as $key => $value) { ?>
<option value='{"<?php echo $value['BookName'] ?>":"<?php echo $value['BookId']; ?>"}'><?php echo $value['BookName'] ?></option>
<?php } ?>
</select>
<input type="hidden" name="<?php echo $bookname; ?>">
<input type="hidden" name="<?php echo $access_token; ?>">
<input type="submit" value="Get Chart of Accounts">
</form>
</body>
</html>
在第 getcoa.php 页上可以做到这一点 json_decode($_POST['books']);
如果我没理解错,那么您是在尝试将各种参数发送到 PHP 脚本进行处理,具体取决于 select 编辑了下拉菜单中的哪个项目?虽然 option
标签可以使用的属性数量有限,但您当然可以使用 dataset
属性 - 或者,如以下代码所示,使用多个属性。
因此,借助一些简单的 javascript,隐藏字段会在 select 菜单更改时填充 - 存储在隐藏字段中的值将发送到 PHP 提交表单时的脚本。
以前,隐藏字段的名称源自原始源数据的内容(值)- 这会使服务器的处理变得棘手,因为您不一定知道要在 PHP 逻辑测试等 - 因此它们被分配了与源数据中的键相对应的名称 - 这样你就知道处理名为 bookid,bookname & access-token
的字段
<?php
/* for test porpoises only */
$access_token=uniqid();
$response='[{
"BookId":"32c03594-1ecb-4f97-8453-5b28a03d26d9",
"BookName":"Book1",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"51d16696-b98a-4b3b-ac67-f36559cff70b",
"BookName":"Book2",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"7b557a75-bf5e-4c29-9f31-43a7fee77520",
"BookName":"Book3",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"c945ade5-d540-4378-9979-3842a1da396b",
"BookName":"Book4",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"814869e2-e5af-48bc-a6da-28f272366955",
"BookName":"Book5",
"Bookstatus":3,
"Country":"AU"
}]';
?>
<html>
<head>
<title>Sending values</title>
<script>
function getelement( name ){
return document.querySelectorAll('form input[name="'+name+'"]')[0];
}
function setvalues( e ){
var n=e.options[ e.options.selectedIndex ];
getelement('bookname').value=n.value;
getelement('access-token').value=n.dataset.token;
getelement('bookid').value=n.dataset.id;
}
</script>
</head>
<body>
<h1>CashBooks</h1>
<form action="getcoa.php" method="post">
<select name="books" onchange="setvalues(this)">
<optgroup label='Books'>
<option disabled='' hidden='hidden' selected=true>Please Select
<?php
$json=json_decode( $response );
foreach( $json as $obj ){
echo "<option value='{$obj->BookName}' data-id='{$obj->BookId}' data-token='{$access_token}' data-status='{$obj->Bookstatus}'>{$obj->BookName}";
}
?>
</optgroup>
</select>
<!-- empty, hidden input fields to be populated when dropdown changes -->
<input type="hidden" name="bookid">
<input type="hidden" name="bookname">
<input type="hidden" name="access-token">
<input type="submit" value="Get Chart of Accounts">
</form>
</body>
</html>
我收到了 API 的以下回复。
[{
"BookId":"32c03594-1ecb-4f97-8453-5b28a03d26d9",
"BookName":"Book1",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"51d16696-b98a-4b3b-ac67-f36559cff70b",
"BookName":"Book2",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"7b557a75-bf5e-4c29-9f31-43a7fee77520",
"BookName":"Book3",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"c945ade5-d540-4378-9979-3842a1da396b",
"BookName":"Book4",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"814869e2-e5af-48bc-a6da-28f272366955",
"BookName":"Book5",
"Bookstatus":3,
"Country":"AU"
}]
我有一个带有下拉框的网络表单,可以选择您想要的书。
我想要发生的事情是,当您单击 提交 时,您将被转到另一个页面,在该页面上我希望能够访问 BookId
, BookName
和通过 $_POST
从第一页访问令牌。我对 BookName
没有任何问题,但不知道如何获取 BookId
和访问令牌。
这是我目前所拥有的:
请注意:访问令牌是通过页面头部的 $_GET
获得的,并分配给 $access_token
变量。
<body>
<?php
$array=json_decode($response, true);
$arr_len = count($array);//length of the array = 5
$for_len = $arr_len - 1;//length - 1
?>
<h1>CashBooks</h1>
<form action="getcoa.php" method="post">
<select name="books">
<?php
for($i=0; $i<=$for_len; $i++){
$bookname = $array[$i]["BookName"];
echo '<option value="' . $bookname . '" name="' . $bookname . '">' .
$bookname . '</option>';
};
?>
</select>
<input type="hidden" name="<?php $bookname; ?>">
<input type="hidden" name="<?php $access_token; ?>">
<input type="submit" value="Get Chart of Accounts">
</form>
</body>
对于 BookId
,我还没有想出如何处理它,所以任何建议都很好。而且我尝试使用访问令牌的方法不起作用。当我按原样单击提交时,我在 "getcoa.php page":
"Notice: Undefined index: access_token in C:\wamp\www\getcoa.php on line 6"
这是第 6 行:
$access_token = $_POST['access_token'];
仅供参考。 token部分解决了
但我认为我并不清楚我试图通过 BookId 实现的目标。在这个页面上,"USER" 唯一会看到的是一个带有 BookNames 列表的下拉菜单,他们从中 select 一个,然后单击提交按钮......在下一页上,我将调用 API 端点,但我需要 BookId 才能调用该端点。
所以 selected BookName 的 BookId 需要以某种方式发布到下一页,所以我可以在该页面上使用 $_POST 来获取 BookId 并使用它来访问所需的端点,在最终用户不知道 "BookId" 存在的情况下。
希望我已经更加清楚我要实现的目标。对不起,如果我没有开始。
在您的脚本中发现多个问题:
在select box
循环中,看如何写一个select框
https://www.tutorialspoint.com/html/html_select_tag.htm
故障:
echo '<option value="' . $bookname . '" name="' . $bookname . '">' .
$bookname . '</option>';
肯定是这样的,options
name
属性
echo '<option value="' . $bookname . '">' . $bookname . '</option>';
:: 怀疑你需要通过 bookid
而不是 bookname
在输入框中,您没有 echo
变量,
而不是
<input type="hidden" name="<?php $bookname; ?>">
<input type="hidden" name="<?php $access_token; ?>">
你需要
<input type="hidden" name="bookname" value="<?php echo $bookname; ?>">
<input type="hidden" name="access_token" value="<?php echo $access_token; ?>">
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php
$response = '[{"BookId":"32c03594-1ecb-4f97-8453-5b28a03d26d9","BookName":"Book1","Bookstatus":3,"Country":"AU"},{"BookId":"51d16696-b98a-4b3b-ac67-f36559cff70b","BookName":"Book2","Bookstatus":3,"Country":"AU"},{"BookId":"7b557a75-bf5e-4c29-9f31-43a7fee77520","BookName":"Book3","Bookstatus":3,"Country":"AU"},{"BookId":"c945ade5-d540-4378-9979-3842a1da396b","BookName":"Book4","Bookstatus":3,"Country":"AU"},{"BookId":"814869e2-e5af-48bc-a6da-28f272366955","BookName":"Book5","Bookstatus":3,"Country":"AU"}]';
$array=json_decode($response, true);
$arr_len = count($array);//length of the array = 5
$for_len = $arr_len - 1;//length - 1
?>
<h1>CashBooks</h1>
<form action="getcoa.php" method="post">
<select name="books">
<?php foreach ($array as $key => $value) { ?>
<option value='{"<?php echo $value['BookName'] ?>":"<?php echo $value['BookId']; ?>"}'><?php echo $value['BookName'] ?></option>
<?php } ?>
</select>
<input type="hidden" name="<?php echo $bookname; ?>">
<input type="hidden" name="<?php echo $access_token; ?>">
<input type="submit" value="Get Chart of Accounts">
</form>
</body>
</html>
在第 getcoa.php 页上可以做到这一点 json_decode($_POST['books']);
如果我没理解错,那么您是在尝试将各种参数发送到 PHP 脚本进行处理,具体取决于 select 编辑了下拉菜单中的哪个项目?虽然 option
标签可以使用的属性数量有限,但您当然可以使用 dataset
属性 - 或者,如以下代码所示,使用多个属性。
因此,借助一些简单的 javascript,隐藏字段会在 select 菜单更改时填充 - 存储在隐藏字段中的值将发送到 PHP 提交表单时的脚本。
以前,隐藏字段的名称源自原始源数据的内容(值)- 这会使服务器的处理变得棘手,因为您不一定知道要在 PHP 逻辑测试等 - 因此它们被分配了与源数据中的键相对应的名称 - 这样你就知道处理名为 bookid,bookname & access-token
<?php
/* for test porpoises only */
$access_token=uniqid();
$response='[{
"BookId":"32c03594-1ecb-4f97-8453-5b28a03d26d9",
"BookName":"Book1",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"51d16696-b98a-4b3b-ac67-f36559cff70b",
"BookName":"Book2",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"7b557a75-bf5e-4c29-9f31-43a7fee77520",
"BookName":"Book3",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"c945ade5-d540-4378-9979-3842a1da396b",
"BookName":"Book4",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"814869e2-e5af-48bc-a6da-28f272366955",
"BookName":"Book5",
"Bookstatus":3,
"Country":"AU"
}]';
?>
<html>
<head>
<title>Sending values</title>
<script>
function getelement( name ){
return document.querySelectorAll('form input[name="'+name+'"]')[0];
}
function setvalues( e ){
var n=e.options[ e.options.selectedIndex ];
getelement('bookname').value=n.value;
getelement('access-token').value=n.dataset.token;
getelement('bookid').value=n.dataset.id;
}
</script>
</head>
<body>
<h1>CashBooks</h1>
<form action="getcoa.php" method="post">
<select name="books" onchange="setvalues(this)">
<optgroup label='Books'>
<option disabled='' hidden='hidden' selected=true>Please Select
<?php
$json=json_decode( $response );
foreach( $json as $obj ){
echo "<option value='{$obj->BookName}' data-id='{$obj->BookId}' data-token='{$access_token}' data-status='{$obj->Bookstatus}'>{$obj->BookName}";
}
?>
</optgroup>
</select>
<!-- empty, hidden input fields to be populated when dropdown changes -->
<input type="hidden" name="bookid">
<input type="hidden" name="bookname">
<input type="hidden" name="access-token">
<input type="submit" value="Get Chart of Accounts">
</form>
</body>
</html>