通过ajax将js值发送​​到php控制器

时间:2016-12-20 14:20:22

标签: javascript php jquery ajax

我有这个按钮

<button  id="<?php echo $u['id']?>" name="activation" onclick="handleButton(this);" type="submit" class="btn btn-success"></button>

这个按钮与此相关

<td id="<?php echo $u['id']?>"><?php echo $u['id']?></td>

我正在使用此脚本将按钮的值发送到我的php控制器

function handleButton(obj) {
    var javascriptVariable = obj.id;
//  alert (javascriptVariable);
    $.ajax({
          type: "POST",
          url: "<?php echo base_url(); ?>index.php/admin/active_users",
          dataType: 'text',
          data: 'myname='+javascriptVariable,
          success: function (data){
            }

    });
}

当我使用警报时,javascriptVariable的结果是正确的,我希望它在我的控制器中,所以我正在我的控制器中尝试这样做:

if(isset($_POST['activation']))
{
    $name = $this->input->post('myname');
    var_dump($name);
}

但是我得到null值,有什么不对?

4 个答案:

答案 0 :(得分:5)

当您通过AJAX从浏览器传递数据时,您在data:参数中传递的数据将被发送到PHP脚本。

因此,如果要在PHP脚本中测试activation,则必须实际发送该参数

另请参阅下面对data:参数创建的修订。在传递多个参数时,它更易于阅读并且更容易正确编码,因为您无需记住&+连接。

function handleButton(obj) {
    obj.preventDefault();
    $.ajax({
        type: "POST",
        url: "<?php echo base_url(); ?>index.php/admin/active_users",
        dataType: 'text',
        data: {activation: 1, myname: obj.id},   // add parameter
        success: function (data){
            alert(data);
        }

    });
}

现在PHP将在$ _POST数组activationmyname

中看到2个参数
if(isset($_POST['activation']))
{
    $name = $_POST['myname'];
    var_dumb($name);
}

或者如果你使用的是我认为你是

的框架
if(isset($this->input->post('activation')) {
    $name = $this->input->post('myname');
    var_dumb($name);
}

编辑:

发现另一个问题,您的按钮具有属性type="submit",这将导致javascript以正常方式提交的表单运行。

删除type="submit"属性并加倍确认表单不会被提交,以及AJAX在AJAX调用之前添加对preventDefault();的调用

答案 1 :(得分:1)

由于php脚本受第二个POST变量[if(isset($_POST['activation']))]的限制,你也应该发布它。

function handleButton(obj) {
    var javascriptVariable = obj.id;
//  alert (javascriptVariable);
    $.ajax({
          type: "POST",
          url: "<?php echo base_url(); ?>index.php/admin/active_users",
          dataType: 'text',
          data: 'myname='+javascriptVariable+'&activation=1',// <-- RIGHT HERE
          success: function (data){
              alert(data);
            }

    });
}

SIDE注意:你也可以回应而不是转储变量:

if(isset($_POST['activation']))
{
    echo $this->input->post('myname');
}

答案 2 :(得分:0)

在你的ajax函数中试试这个:

   public ReportingDbContext() : base("ReportingDbContext")
    {
        var objectContext = ((IObjectContextAdapter)this).ObjectContext;
        objectContext.SavingChanges += new EventHandler(OnSavingChanges);
    }

    public void OnSavingChanges(object sender, EventArgs e)
    {
        foreach (ObjectStateEntry entry in
            ((ObjectContext)sender).ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified))
        {
            if (!entry.IsRelationship && (entry.Entity is ISerialize))
            {
                (entry.Entity as ISerialize).Serialize();
            }
        }
    }

在你的PHP脚本中,你可以function handleButton(obj) { var javascriptVariable = obj.id; //alert (javascriptVariable); $.ajax({ type: "POST", url: "<?php echo base_url(); ?>index.php/admin/active_users", dataType: 'text', data: {myname: javascriptVariable}, success: function (data) {} }); } 来获取它(也许$_POST['myname']可以工作,你可以测试它)

答案 3 :(得分:0)

看两个id

<button  id="<?php echo $u['id']?>" name="activation" onclick="handleButton(this);" type="submit" class="btn btn-success"></button>

<td id="<?php echo $u['id']?>"><?php echo $u['id']?></td>

对于这两个html元素id是相同的。它不能在同一页面中使用。这可能会给您带来问题......