我正在编写我的第一个Web服务,我遇到了与JSON数据传递相关的问题。我的Web服务分为两个文件: controller.php ,其中包含服务处理程序, service.php ,其中包含要求提供的类和方法
这是来自controller.php的采集片段:
public function atender() {
// pre-procesamos la petición
if (!empty($_POST)) {
if (!empty($_POST["class"]) && !empty($_POST["action"]) && !empty($_POST["function"])) {
$clase = ucwords($_POST["class"]);
$metodo = "{$_POST["action"]}{$this->obtenerMetodo($_POST["function"])}";
$id = (!empty($_POST["datos"]) ? stripslashes($_POST["datos"]) : null);
我可以参加GET和POST模式的请求(对于不需要身份验证的方法,我使用GET,例如 getCategories , getCategoryById , getProducts 和 getProductById 。这些是在寿司餐厅获得菜肴类别和菜肴的方法。)
对于任何GET请求,一切都像预期的那样工作。当我处理POST请求时出现问题。我需要在JSON中获取所有URL参数,因为这是为iOS应用程序提供服务,而JSON是我们处理数据的方式。
这是来自service.php的处理片段:
public function putUser($datos) {
if (!empty($datos)) {
$usuario = json_decode($datos);
$this->log .= implode("/", $usuario) . "\r\n";
在这种情况下, $ datos 是来自请求的JSON编码数据。它在controller.php(上面的代码)中以 $ id 的形式收到。由于这是我的第一个网络服务,我很可能在这里做了一些非常糟糕的事情,但我有点盲目。
我尝试了不同的服务处理代码变体。使用json_decode($ datos,true)也不起作用。我得到了
'意外的令牌<'作为回复,并以原始形式(使用谷歌Chrome的高级REST客户端)说:''警告:implode()[
<a href='function.implode'>function.implode</a>
]:在/ home / refine / public_html / sushigo / palma中传递的参数无效第344行的/service.php。
我知道SOAP通常是编写这样的自定义代码的更好的替代方法,但是,现在,我需要坚持使用这些代码并为我的下一个项目实现更好的替代方案。你能告诉我我做错了什么吗?
答案 0 :(得分:1)
错误消息基本上表示它不是有效的JSON - 并且此类错误消息通常是正确的。
您的错误在发送/接收代码中的某处。您可能以一种形式发送JSON并尝试以其他方式访问它。由于我无法查看手机发出的请求,我猜是这样的: