【问题标题】:How to pass javascript variable inside view to controller in php如何将视图内的javascript变量传递给php中的控制器
【发布时间】:2019-02-27 12:30:03
【问题描述】:

我需要将变量值 从 javascript 传递给控制器​​。值是通过html中的select option获取的,javascript代码在view里面。我已经编写了代码,但它只是显示了我选择的 HTML 值,它没有存储在 php 变量中。

这是我的 javascript 代码:

$('#button-search-ohr').on('click', function() {
    var month = $('#monthChoose').val();

    if(month == 0) {
        alert('Month must be choosen!');
    }

    $.ajax({
        async   : true,
        type    : 'POST',
        url     : '<?php echo base_url();?>sms/lapkinerjastat', //this url to controller
        data    : {month:month},
        success : function(data) {
            $('#month').html(data);
        }
    });
}

这是我的 html

<h5 class="pilih-bulan">Month Choose
     <select id="monthChoose" name="month">
          <option value="0">Pilih bulan</option>
          <option value="Januari">Januari</option>
          <option value="Februari">Februari</option>
          <option value="Maret">Maret</option>
          <option value="April">April</option>
          <option value="Mei">Mei</option>
          <option value="Juni">Juni</option>
          <option value="Juli">Juli</option>
          <option value="Agustus">Agustus</option>
          <option value="September">September</option>
          <option value="Oktober">Oktober</option>
          <option value="November">November</option>
          <option value="Desember">Desember</option>
     </select>
     <button id="button-search-ohr" type="submit">Search</button>
</h5>

<div id='month'>
    <?php 
    if(isset($_POST['month'])) {
        $month = $_POST['month'];
        echo 'This is '.$month;
    }else {
        $month = null;
        echo 'Nothing';
    }?>
</div>

注意:使用 ajax 将变量传递给控制器​​会更好。

【问题讨论】:

  • 提交表单时使用 .serialize 方法
  • @curiosity 感谢您的回复,但我不使用select option 的表单。我想在 javascript 中传递变量并将其存储到 php 中的控制器。

标签: javascript php html ajax codeigniter


【解决方案1】:

您误解了 ajax 的工作原理。 JS 是客户端,而 php 是服务器端。无论您是否选择异步页面上的 php 已已经呈现,因此您无法在事后更改 php 代码或变量。您能做的最好的事情就是在成功回调中操作 div(这似乎您已经在尝试这样做了)。

所以在你的 ajax 控制器 (lapkinerjastat) 中你会这样做:

$month = $this->input->post('month');
if (is_null($month)) {
    echo 'This is ' . $month;
} else {
    echo 'Nothing';
}

并通过$('#month').html(data); 复制您的逻辑(您在服务器端 php 中的逻辑)。

我不知道为什么要为此使用 ajax。您可以使用直接的 js 轻松完成这一切。

【讨论】:

  • 感谢您的回复,我需要删除success : function(data) { $('#month').html(data); } 吗?
【解决方案2】:

您在控制器中写下条件,这样 ajax 结果就是纯文本。

【讨论】:

  • 但我需要发送并存储变量以供查看,而不仅仅是回显它。
【解决方案3】:

在您的代码中,您两次使用了变量 month 的值,而不是将“月”定义为 $_POST 全局变量名:

data    : {month:month},

解析后,如果选择的月份是四月,结果是:

data    : {April:April},

当你真正想要拥有的时候

data    : {month:April},

因此我建议更改您的代码并将变量名用引号括起来:

data    : {'month':month},

这样 PHP 脚本实际上将有一个 $_POST['month'] 可以使用;)

【讨论】:

  • 这是公开的吗?如果是这样,请提供该页面的链接。或者,代码 sn-p 会很有用。
  • 我尝试了你的建议,但结果是页面变成了两倍。这是截图ibb.co/j5s3Gp。在那张照片中,我设法将变量从 javascript 传递给 php,但结果是双页。 EDIT 在之前的评论中我无意中放错了图片。不,它在本地主机中。
猜你喜欢
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多