1

我在使用 json codeigniter rest 时遇到问题

我正在对服务器进行此调用,问题在于它没有关闭 json 标签

s, USA","clientUID":"7","email":null,"idipad":"2","dateModified":null},{"id":"19","uid":null,"名称”:“韦恩公司”,“电话”:“932345324”,“地址”:“第二街。312,哥谭市","clientUID":"7","email":"waynecorp@gmail.com","idipad":"1","dateModified":null}]

它错过了决赛}

这是创建响应的代码:

$this->response(array('login'=>'login success!','user_admin_id'=>$user_id,'client'=>$client,'users'=>$users,'projects'=>$projects,'plans'=>$plans,'meetings'=>$meetings,'demands'=>$demands,'tasks'=>$tasks,'presences'=>$presences,'contractors'=>$contractors,'companies'=>$companies), 200);

这是使用 curl 的客户端调用:

$this->curl->create(' http://dev.onplans.ch/onplans/index.php/api/example/login/format/json ');

// Option & Options
$this->curl->option(CURLOPT_BUFFERSIZE, 10);
$this->curl->options(array(CURLOPT_BUFFERSIZE => 10));

// More human looking options
$this->curl->option('buffersize', 10);

// Login to HTTP user authentication
$this->curl->http_login('admin', '1234');

// Post - If you do not use post, it will just run a GET request
//$post = array('remember'=>'true','email'=>'admin.architect@onplans.ch','password'=>'password');
        $post = array('remember'=>'true','email'=>'admin.architect@onplans.ch','password'=>'password');
$this->curl->post($post);

// Cookies - If you do not use post, it will just run a GET request
$vars = array('remember'=>'true','email'=>'manuel@ffff.com','password'=>'password');
$this->curl->set_cookies($vars);

// Proxy - Request the page through a proxy server
// Port is optional, defaults to 80
//$this->curl->proxy('http://example.com', 1080);
//$this->curl->proxy('http://example.com');

// Proxy login
//$this->curl->proxy_login('username', 'password');

// Execute - returns responce
echo $this->curl->execute();

// Debug data ------------------------------------------------

// Errors
$this->curl->error_code; // int
$this->curl->error_string;


        print_r('error :::::LOGINN REMOTE:::::'.$this->curl->error_string);
// Information
$this->curl->info; // array

       print_r('info :::::::::::::'.$this->curl->info);

响应属于来自 phil 的其余 api codeigniter

/**
 * Response
 *
 * Takes pure data and optionally a status code, then creates the response.
 *
 * @param array $data
 * @param null|int $http_code
 */
public function response($data = array(), $http_code = null)
{
    global $CFG;

    // If data is empty and not code provide, error and bail
    if (empty($data) && $http_code === null)
    {
        $http_code = 404;

        // create the output variable here in the case of $this->response(array());
        $output = NULL;
    }

    // If data is empty but http code provided, keep the output empty
    else if (empty($data) && is_numeric($http_code))
    {
        $output = NULL;
    }

    // Otherwise (if no data but 200 provided) or some data, carry on camping!
    else
    {
        // Is compression requested?
        if ($CFG->item('compress_output') === TRUE && $this->_zlib_oc == FALSE)
        {
            if (extension_loaded('zlib'))
            {
                if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) AND strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE)
                {
                    ob_start('ob_gzhandler');
                }
            }
        }

        is_numeric($http_code) OR $http_code = 200;

        // If the format method exists, call and return the output in that format
        if (method_exists($this, '_format_'.$this->response->format))
        {
            // Set the correct format header
            header('Content-Type: '.$this->_supported_formats[$this->response->format]);

            $output = $this->{'_format_'.$this->response->format}($data);
        }

        // If the format method exists, call and return the output in that format
        elseif (method_exists($this->format, 'to_'.$this->response->format))
        {
            // Set the correct format header
            header('Content-Type: '.$this->_supported_formats[$this->response->format]);

            $output = $this->format->factory($data)->{'to_'.$this->response->format}();
        }

        // Format not supported, output directly
        else
        {
            $output = $data;
        }
    }

    header('HTTP/1.1: ' . $http_code);
    header('Status: ' . $http_code);

    // If zlib.output_compression is enabled it will compress the output,
    // but it will not modify the content-length header to compensate for
    // the reduction, causing the browser to hang waiting for more data.
    // We'll just skip content-length in those cases.
    if ( ! $this->_zlib_oc && ! $CFG->item('compress_output'))
    {
        header('Content-Length: ' . strlen($output));
    }

    exit($output);
}
4

1 回答 1

2

这个答案是从Github issue中引用的。也是由佩德罗·迪尼斯提出的,我是客人。我今天遇到了这个问题,花了很长时间来寻找解决方案。我在这里分享,希望能帮助像我这样的人。关键是替换库文件中的第 430 行: REST_Controller.php :

header('Content-Length: ' . strlen($output));

经过

header('Content-Length: ' . strlen("'".$output."'"));

更新:问题在这里解决了 或者你可以注释掉代码,它会运行良好。:)

于 2014-12-15T04:49:02.940 回答