如何获得Wireit json输出?

时间:2011-09-16 04:12:31

标签: php json

我正在测试wireit并且能够创建新的表单容器等。我测试了ajax适配器示例并让它包含类似的内容:

WireIt.WiringEditor.adapters.Ajax.config =  {
    saveWiring: {
        method: 'PUT',
        url: 'http://voipd7.localhost/wirings.json'
    },
    deleteWiring: {
        method: 'GET',
        url: function(value) {
            if(console && console.log) {
                console.log(value);
            }
            // for a REST query you might want to send a DELETE /resource/wirings/moduleName
            return "fakeSaveDelete.json";
        }
    },
    listWirings: {
        method: 'GET',
        url: 'listWirings.json'
    }

保存网址“http://voipd7.localhost/wirings.json”是一个只将$ _GET或$ _Post写入文件的php页面,但它输出的唯一内容是:

Array
(
    [q] => wirings.json
)

我错过了什么吗?这不是通过get或post发送json的东西吗?

1 个答案:

答案 0 :(得分:0)

从提供的配置中可以看出,执行保存操作的HTTP方法是PUT。使用此方法时,超全局变量$_POST$_REQUEST不包含已发布的数据。 $_GET仍会包含查询字符串中的数据。

要在方法为PUT时解析发布的数据,请执行以下操作之一:

$vars = array();
parse_str(file_get_contents("php://input"), $vars);

PUT方法希望接收文件作为输入。这就是我们使用file_get_contentsparse_str解析参数的原因,就好像它是通过URL传递的查询字符串一样。无论使用何种方法,都要提取数据变量:

$vars = array();
if($_SERVER['REQUEST_METHOD'] == 'GET') {
    $vars = $_GET;
} else if($_SERVER['REQUEST_METHOD'] == 'POST') {
    $vars = $_POST;
} else if($_SERVER['REQUEST_METHOD'] == 'PUT') {
    parse_str(file_get_contents("php://input"), $vars);
}

我的回复基于这篇非常好的文章:http://www.lornajane.net/posts/2008/accessing-incoming-put-data-from-php

一个注意事项:通常Web服务器配置为不允许PUT方法,但是当它看到(至少Apache这样做)PUT请求是针对现有文件时,它会调用此文件来处理请求和上面的代码可以在文件中用来提取发送的参数。