【问题标题】:Yii2 Post to controller and get back dataYii2 发布到控制器并取回数据
【发布时间】:2015-10-27 17:05:46
【问题描述】:

这是我的代码。

<?= $form->field($model, 'projectTitle')->dropDownList($fullprojectlist, [
'prompt'=>'-Choose a Course-',
'id' => 'projectList',
'type'=> 'POST',
'onchange'=>' var value = $("#projectList :selected").val();
        //$("#draftproposalform-supervisor").val(value);'


        $.post("'.Yii::$app->urlManager->createUrl(["/draftproposalform.php", "id" => value).'", function(data) {

        //set value for text box
        }
]);?>

<?= $form->field($model, 'supervisor')->textInput(['readonly'=> 'true']); ?>

我正在尝试将选定的值传递给控制器​​,以便我可以查询数据库以查找相关信息。然后将该信息发送回视图以设置文本。

我知道如何从数据库中获取数据。我只是不知道如何将选定的值传递给控制器​​并在保持选定值在视图中的同时将值返回给 settext。

public function actionDraftproposalform() {
    $model = new DraftProposalForm();

    if($model->load(Yii::$app->request->post()) && $model->validate())
    {
        return $this->refresh();
    }

    else {

   $query = new Query;
   $query->select(['User.name', 'Project.title', 'Project.project_ID'])
        ->from('Project')
        ->innerJoin('Supervisor', '`Project`.`supervisor_ID` = `Supervisor`.`supervisor_ID`')
        ->innerJoin('User', '`Supervisor`.`user_ID` = `User`.`user_ID`')
        ->where(['Project.project_type_ID'=>1, 'Project.approval_ID'=>2]);

    $projectlist = $query->all();

    $fullprojectlist = ArrayHelper::map($projectlist, 'name', 'title', 'project_ID');


        return $this->render('draftproposalform', [
            'model'=>$model,
            'fullprojectlist' => $fullprojectlist]);
    }
}

对不起,如果它很乱。说实话,我什至不知道将数据传回这里是否是正确的选择。

编辑代码

查看

<?php
        $this->registerJs(' $("#projectList").change(function() {
        var value = $("#projectList option:selected").val();
        alert(value);
        $.post(
        "'.Yii::$app->urlManager->createUrl(["/draftproposalform.php"]).'", 
        {id:value}, 
        function(data) {

            alert("Test");
            $("input[name=\'supervisor\']").val(data);
        }); });');
    ?>

        <?= $form->field($model, 'projectTitle')->dropDownList($projectlist, [
        'prompt'=>'-Choose a Course-',
        'id' => 'projectList',
        'type'=> 'POST'
        ]);
    ?>

    <?= $form->field($model, 'supervisor')->textInput(['readonly'=> 'true']); ?>

控制器

public function actionDraftproposalform() {
    $model = new DraftProposalForm();

    if(Yii::$app->request->isPost)
    {
        $id = Yii::$app->request->post("id");

        $super = DbProject::findOne(["project_ID"=>$id]);

        $supervisor = DbSupervisor::findOne(["supervisor_ID"=>$super->supervisor_ID]);

        $user = DbUser::findOne(["user_ID"=>$supervisor->user_ID]);

        //$super = DbSupervisor::findOne(["supervisor_ID"=>$id]);

    echo $user->name;

    exit;
    }


    else {


        $projectlist = ArrayHelper::map(DbProject::find()->where(['project_type_ID' => 1, 'approval_ID' => 2])->asArray()->all(), 'project_ID', 'title');

        return $this->render('draftproposalform', [
            'model'=>$model,
            'projectlist' => $projectlist]);
    }
}

【问题讨论】:

  • 您应该提交...您的表单
  • 测试了你的 js 并将请求发送到 draftproposalform.php。如果它有效,您应该响应 html 或 json 格式的数据,并在 javascript 成功函数中更改文本框值;)。您可以发布您的 draftproposalform.php 响应操作
  • @NuriddinRashidov 感谢您的回复。我已经发布了我的控制器代码。
  • 所以现在我将发布答案,您可以测试一下吗?如果有任何错误,请回复,因为我可能误解了问题或您的情况

标签: yii2


【解决方案1】:

你能测试一下吗? //控制器

<?
public function actionDraftproposalform() {
    $model = new DraftProposalForm();

    if(Yii::$app->request->isPost)
    {   
        $id=Yii::$app->request->post("id");
        $super=Supervisor::findOne(["supervisor_ID"=>$id]);
        if($super) echo $super->name;else echo "Not found";exit;       
    }

    else {

   $query = new Query;
   $query->select(['User.name', 'Project.title', 'Project.project_ID'])
        ->from('Project')
        ->innerJoin('Supervisor', '`Project`.`supervisor_ID` = `Supervisor`.`supervisor_ID`')
        ->innerJoin('User', '`Supervisor`.`user_ID` = `User`.`user_ID`')
        ->where(['Project.project_type_ID'=>1, 'Project.approval_ID'=>2]);

    $projectlist = $query->all();

    $fullprojectlist = ArrayHelper::map($projectlist, 'name', 'title', 'project_ID');


        return $this->render('draftproposalform', [
            'model'=>$model,
            'fullprojectlist' => $fullprojectlist]);
    }
}

//查看注册js:把这个放到你的视图中

<?
$this->registerJs(' $("#projectList").change(function(){
            var value = $("#projectList option:selected").val();
            $.post(
            "'.Yii::$app->urlManager->createUrl(["/draftproposalform"]).'",
             { id:value },
             function(data) {
               $( "#draftproposalform-supervisor").val(data);
            }); });');
?>

【讨论】:

  • 嗨。你能解释一下这条线是什么意思吗? $("input[name='supervisor']").val(data);我想把我的文本框 ID 放在那里吗?
  • 此 jquery 选择器用于将文本设置到您的文本框中。请参考:api.jquery.com/attribute-equals-selector
  • 你好。我已根据您的代码更改了我的代码。 onchange 什么都没有发生。如何测试值是否已发布到控制器?
  • 检查你的控制台网络面板。应该有您对服务器的发布请求
  • “echo $super->name”是否负责将数据传递给函数(数据)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 2020-11-14
  • 2015-08-02
  • 1970-01-01
  • 2013-08-29
相关资源
最近更新 更多