Codeigniter,让ajax按下按钮运行

时间:2012-03-05 19:35:02

标签: php ajax codeigniter

我最初的目标是在按下按钮时执行php文件。我用过ajax。当javascript在视图中时,它可以工作。

但是,我尝试将javascript切换到自己的.js文件并将其包含在标头中。它不再起作用了。我很迷惑。

型号代码:

public function insert_build($user_id)
{
    $query = "INSERT INTO user_structure (str_id, user_id) VALUES ('7', '$user_id')";
    mysql_query($query) or die ('Error updating database');
}

这里有一点值得注意的是,当我将$ user_id作为值包含时,它完全否定了我的headertemplate。就像在,它只是没有加载。当我用静态值(即'7')替换$ user_id时,它没有问题。

这是我的观看代码:

<div id="structures">
    <h1>Build</h1>
    <form name="buildForm" id="buildForm" method="POST">
        <select name="buildID" class="buildClass">
        <option value="0" selected="selected" data-skip="1">Build a Structure</option>
<?php foreach ($structures as $structure_info): ?>
    <option name='<?php echo $structure_info['str_name'] ?>' value='<?php echo $structure_info['str_id'] ?>' data-icon='<?php echo $structure_info['str_imageloc'] ?>' data-html-text='<?php echo $structure_info['str_name'] ?><i>
        <?php echo $structure_info['timebuildmins'] ?> minutes<br><?php echo $structure_info['buy_gold'] ?> gold</i>'><?php echo $structure_info['str_name'] ?></option>
<?php endforeach ?>
        </select>
        <div id="buildSubmit">
            <input id ="btnSubmit" class="button" type="submit" value="Submit"/>
        </div>
    </form>
</div>

继承我的.js文件:

$(".button").click(function(e){
    e.preventDefault();
    $.ajax({
    type: "POST",
    url: "<?php $this->structure_model->insert_build($user_id) ?>",         //the script to call to get data          
    data: "",                        //you can insert url arguments here to pass to api.php
                                        //for example "id=5&parent=6"
    dataType: 'json',                //data format      
    success: function(data)          //on receive of reply
    {
    alert("success!");
    } 
    });
}); 

我几乎可以肯定我知道这个问题:structure_model->insert_build($user_id) ?>在视图之外时不起作用。虽然,我不知道替代方案。

我排除了头文件。我确认.js文件确实被定向到正确的路径。

有人可以解释一下这样做的正确方法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

您是否将javascript移动到浏览器直接访问的.js? I.E:如果您查看来源,那么您在javascript代码中看到了<?php ... ?>

对我来说,听起来好像PHP没有得到解析。如果不是这样,那么请你澄清一下。

如果您需要在javascript中包含PHP变量,则应使用CI生成包含的JS页面。您甚至可以创建一个纯粹的JS视图,并将其称为普通页面。

否则,如果你想从CI中分离JS,你应该引用JS变量而不是PHP。然后在您的CI页面中,使用<script>var jsVar = <?php echo phpvar(); ?></script>标记定义它们。

答案 1 :(得分:0)

当您将js文件移动到它自己的文件时,将无法再访问php变量。您可以将js代码移回视图文件,也可以通过javascript获取网址。例如,见下文。

HTML:

<div id="structures">
  <h1>Build</h1>
  <form name="buildForm" id="buildForm" method="POST">
    <input type="hidden" name="url" value="<?php $this->structure_model->insert_build($user_id) ?>" />
    <!-- Rest of your code -->
  </form>
</div>

使用Javascript:

$(".button").click(function(e){
  var form_url = $(this).closest('form').find('input[name=url]').val();
  e.preventDefault();
  $.ajax({
    type: "POST",
    url: form_url,         //the script to call to get data          
    data: "",                        //you can insert url arguments here to pass to api.php
                                    //for example "id=5&parent=6"
    dataType: 'json',                //data format      
    success: function(data)          //on receive of reply
    {
      alert("success!");
    } 
  });
});