2017-05-18 15:09:33 3228次浏览 10条回答 0 悬赏 30 金钱

想个办法让$model->load(Yii::$app->request->post())能够得到ajax提交的json数据

补充于 2017-05-18 15:10

大婶们来回答我的问题啊,非常感谢!!!

最佳答案

  • 6把刀 发布于 2017-05-19 11:25 举报

    你的描述:提到一个ajax的json数据 $model->load()

    先分析下步骤:判断ajax请求 转换raw HTTP request body 也就是你所发送的json数据,拿到这个数据只要用json::decode转换成数组,那就随你怎么办了

    知道步骤了,那就代码了
    if(Yii::$app->request->isAjax) 这就是判断ajax的方法,请求都是在 request里的,去看下API就行了

    那如何转换数据呢,当然方法太多了,目的只有一个就转换数据,那数据从哪来呢,当然是request这个对象里,在哪里处理呢,生命周期,事件。

    2 条回复
    回复于 2017-05-20 19:15 回复

    首先,我打印了ajax用POST方法传过来的数据,是数组,然后我就根据自己的思路 验证了一下发现完全可以,个人比较赞同刀哥的回答。顺便贴上我的代码,希望能为后来者一些启发吧!
    if (Yii::$app->request->isAjax) {

            $data = Yii::$app->request->post();
            $username = explode(":", $data['username']);
            $password = explode(":", $data['password']);
            $sms = explode(":", $data['sms']);
            $model = new SignupForm();
            $model->username = $username[0];
            $model->password = $password[0];
            $model->sms = $sms[0];
        }
    
    回复于 2017-05-22 17:30 回复

    你这写法可以简化下用data的数据,可以接接yii\helpers\Json:decode(Yii::$app->request->post())

  • 回答于 2017-05-18 16:10 举报

    你不能写个接口?post获取的是表单里面的内容

  • 回答于 2017-05-18 16:11 举报

    高级模版,前台frontend/web/index.php怎么调用后台backen/web/upload目录下的图片显示出来,后台能够正常显示?求帮忙

    1 条回复
    回复于 2017-05-19 11:55 回复

    你上传图片得时候就可以直接上传到前台frontend里面,Yii::$app->getAlias("@frontend");直接能获得你前台frontend的绝对路径,根据这个路径传就ok。前台想要调后台图片得话,你直接注册个二级域名指向你的上传图片文件夹。这种方发可以试试

  • 回答于 2017-05-18 17:27 举报

    疯了吧,想实现就自己写方法。

  • 回答于 2017-05-18 17:56 举报

    具体看json数据的格式,如果不是从yiiactiveform提交过来的,json对应的是model的key=>value,在post外层加上model的名称,可以这样

    $model->load([$model->formName()=>Yii::$app->request->post()]);
    
    觉得很赞
  • 回答于 2017-05-18 21:16 举报

    修改load方法,让他识别json。
    或者在load前面加个处理机制,把json数据格式化成现有模式。

  • 回答于 2017-05-19 11:06 举报

    在load之前加一层处理,或者自己写个load类, 判断处理完以后 call Yii的load 即可。

  • 回答于 2017-05-19 11:25 举报
    /**
     * 重载load方法
     */
    public function load($data, $formName = null)
    {
        if (parent::load($data, $formName)) {
            return $this->loadGoodsData();
        }
    
        return false;
    }
    private function loadGoodsData(){
        //在这里处理你的JSON
    
        return true;
    }
    
    1 条回复
    回复于 2017-05-20 19:16 回复

    你这个方法,我会认真试试的,多谢!!!

  • 回答于 2017-05-19 15:33 举报

    ?

  • 回答于 2017-05-19 17:41 举报

    $model->load(Yii::$app->request->post(),'') 第二个参数为空就OK

您需要登录后才可以回答。登录 | 立即注册
Mr_Zhu
见习主管

Mr_Zhu

注册时间:2017-01-16
最后登录:2017-08-04
在线时长:13小时12分
  • 粉丝1
  • 金钱295
  • 威望0
  • 积分425

热门问题