CakePHP 2 requestAction 将我的 JSON 编码破坏为 Swift ......无形中

Posted

技术标签:

【中文标题】CakePHP 2 requestAction 将我的 JSON 编码破坏为 Swift ......无形中【英文标题】:CakePHP 2 requestAction breaks my JSON encoding to Swift... invisibly 【发布时间】:2016-07-28 14:58:48 【问题描述】:

我有 Cakephp 2 输出 JSON,我在 Xcode iPhone 模拟器中有 Swift 2 代码加载 JSON 数据。

在我的控制器中,这是生成 JSON 的代码:

public function iosDemoIndex() 
    $studentDataIn = $this->Student->getStudentsByUserId(298, 'rASC');
    $studentDataOut = [];
    foreach ($studentDataIn as $student) 
        //$currentIep = $this->Iep->requestAction('/ieps/getCurrentIep/' . $student['Student']['id']);
        $goals = $this->Goal->find('all', array('conditions' => array('Goal.student_id =' => $student['Student']['id'])));
        $goalHolder = array();
        foreach ($goals as $goal) 
            array_push($goalHolder, $goal['Goal']['goal_title']);
        
        array_push($studentDataOut, array('studentName' => $student['Student']['l_name']. ", " . $student['Student']['f_name'], 'studentGoals' => $goalHolder));
    
    $this->set(array(
    'students' => $studentDataOut,
    '_serialize' => array('students')
    ));

效果很好。我的 Swift 代码通过 JSON 成功地将学生数组加载到结构数组中。但是,如果我只是取消注释第 5 行(它抓取了我最终希望用来限制第 6 行查找的数据),Xcode 会给我:

Error with Json: Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 2." UserInfo=NSDebugDescription=Invalid value around character 2.

第 5 行不应以任何方式更改 JSON 文档。当我查看 JSON 本身时,无论该行是否被注释掉,它看起来都是一样的。

那么,任何想法,一个不相关的,应该是不可见的 requestAction 可能会破坏我的 JSON... 以一种我看不到的方式?谢谢。

【问题讨论】:

【参考方案1】:

为了后代(未来的我):

这是一个登录问题。 JSON 在我的浏览器中看起来相同的原因是我当时在浏览器中有一个活动的用户会话。如果没有该会话,(例如,当 iOS 模拟器尝试加载 JSON 页面时)CakePHP 将返回重定向到登录。可行的解决方案包括在生成 JSON 的控制器中复制 requestAction 代码(虽然这不是很干),或者在 Swift 方面建立适当的登录处理。

【讨论】:

以上是关于CakePHP 2 requestAction 将我的 JSON 编码破坏为 Swift ......无形中的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 cakePHP requestAction 加载完整视图

CakePHP:以数组为参数调用另一个控制器动作的最佳方法?

Cakephp 内部从控制器重定向到另一个控制器

csharp requestaction.cs

将数据保存到 2 个表中 cakephp 3

CakePHP 2.9 将 CSV 字符串转换为 HABTM 数据