如何使用POST创建一个php Web服务,使用JSON发送req / res?

时间:2014-01-17 01:25:36

标签: php jquery json api

我被要求创建一个使用POST而不是GET的Web服务,因此不应该有查询字符串。将POST请求发送到/ myservice时,将使用名为“numbers”的属性传递单个JSON对象。        我认为这个规范要求一个只有两个字段的表单,一个用于保存数字的文本字段,用逗号分隔,以及一个提交按钮字段。
1)我应该使用JavaScript和/或JQuery从表单字段中获取数字并将它们转换为JSON对象吗?        具体来说,这个人进入表单字段,名称/ id为“数字”,数字为:2,3,4。这需要变成这样的:

{
  "numbers": [
     2, 3, 4
   ]
 }

然后我想我会或者可以使用JQuery的ajax方法将JSON数据字符串发送到 存在于的PHP Web服务: http://mydomain.com/myservice 如上所述,它需要在没有查询参数的情况下发送。该服务将返回一个json对象,表示所有数字的总和,所有数字的乘积,以及平均值或平均值。因此,发回的结果将是

{
    "results": {
        "sum": 9,
        "product": 24,
        "average": 3
     }
}

我陷入困境的地方可能是最容易的地方。我可以将表单发布到同一页面然后我可以使用JQuery检查表单是否已发布,如果是,则将输入表单的数字转换为JSON对象。 JavaScript是否可以访问$ _POST变量? 或者我应该使用事件处理程序来响应表单提交按钮上的单击。但是如何获取用户输入的数据并将其转换为参数为“numbers?”的JSON对象。

然后在服务器端,我需要解析JSON对象,对数字数组执行操作,然后创建要返回的JSON结果对象。
有人可以提供一些建议吗?我不知道我是不是应该在PHP中完成整个事情,或者更好的做一些客户端JQuery / JavaScript处理来创建JSON对象。 谢谢, 布鲁斯

1 个答案:

答案 0 :(得分:0)

查看PHP's json_encode function。如果您的数字在一个字段中发布,您将需要通过分隔符将它们拆分以形成一个数组,如下所示:

// custom callback function will trim the whitespace
// then convert to an integer
function trimAndConvert($string_number) {
    return (int)trim($string_number);
}

$numbers = explode(',', $_POST['your_numbers']); // get your input from $_POST
$numbers = array_map('trimAndConvert', $numbers); // trim whitespace and convert to int
$numbers = array('numbers' => $numbers);    

$json = json_encode($numbers);

使用array_map指向一个自定义回调函数,该函数将修剪爆炸位的空白(它们可能在两侧都有空格等)然后转换为整数。如果你没有转换为整数,那么数字在JSON中以字符串形式出现(用引号括起来)。

这将为您提供所需的JSON输出,例如:

{
  "numbers": [2, 3, 4]
 }

从这里开始,您可以使用CURL或其他一些不使用CURL的选项(如果您没有安装CURL)执行对该URL的POST请求。见这些文章:

希望这有帮助。