我最初的目标是在按下按钮时执行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文件确实被定向到正确的路径。
有人可以解释一下这样做的正确方法吗?谢谢!
答案 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!");
}
});
});