【发布时间】:2014-03-28 07:59:05
【问题描述】:
我们有一个名为 Create 的 API 方法,它以 JSON 格式接收以下数据
{data:
{
"token":"73264280-be3f-4f5b",
"BuildingDisplay":"Fire Station 21 Fairburn - 19 East Broad St.",
"CallerEmail":"Jim.Parker@yahoo.com",
"CallerFax":"",
"CallerFirstName":"Jim",
"CallerLastName":"Parker",
"CallerMiddleInitial":"",
"CallerOtherPhone":"",
"CallerState":"",
"CallerWorkPhone":"918-354-2874"}}
有人可以说明如何让 API 接收以下格式的数据:
http://folder/users/Create?data={"BuildingDisplay":"Fire Station 21 Fairburn - 19 East Broad St.",
"CallerEmail":"Jim.Parker@yahoo.com",
"CallerFax":"",
"CallerFirstName":"Jim",
"CallerLastName":"Parker",
"CallerMiddleInitial":"",
"CallerOtherPhone":"",
"CallerState":"",
"CallerWorkPhone":"918-354-2874"}&token=73264280-be3f-4f5b
非常感谢。
$.ajax({
type: "POST",
url: "proxyCheck.php",
data: '{data: ' + JSON.stringify(myData) + '}',
contentType: "application/json;charset=utf-8",
dataType: "json",
async: false,
success: function (response) {
alert("Record has been added successfully.");
window.location.reload();
}
});
return false;
}
//然后是proxyCheck.php:
<?php
//DESCRIPTION: Allow Ajax scripts to request content from a web service they otherwise may not be able to.
$ch = curl_init("http://Users/Services/Create");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $_POST);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output
?>
【问题讨论】:
-
为什么不在 HTTP POST 正文中获取 JSON 数据参数?为什么需要 HTTP GET?
-
@AlexP,我以为我在使用 POST 方法?
-
那么你的问题是如何通过
jquery跨域请求提交这些数据?当您在 URL 中编写此 JSON 数据时,您实际上是在尝试通过 GET 提交它。使用jsonp,您可以使用 GET 而不会感到头疼。对于 POST,您需要使服务器支持 CORS。 -
@ALexP,我很抱歉我太担心过于冗长而失去我的听众,以至于我没有提供所有需要的信息。我们有一个名为 proxyCheck.php 的文件。该文件有助于解决跨域问题。因此,ajax 将 json 数据发布到 proxyCheck.php,而 proxyCheck.php 又将数据发布到
CreateAPI 方法。我已经更新了上面的代码,看看我们是如何做到的。 -
只要有条理并包含相关代码和标签,就不用担心太罗嗦了。例如,
jsonp与此问题无关。我认为当您从 POST(从 Ajax 获得)获取参数并将其转换为后续 GET 请求时,您需要专注于您的 PHP 代码。顺便问一下,Create服务不能从 POST 正文中提取所有这些参数吗?