Codeigniter, запуск Ajax при нажатии кнопки - PullRequest
0 голосов
/ 05 марта 2012

Моя первоначальная цель состояла в том, чтобы заставить файл 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 в качестве значения, он полностью отменяет шаблон заголовка. Как в, это просто не загружается. Когда я заменяю $ user_id на статическое значение (то есть '7'), это работает без проблем.

Это мой код просмотра:

<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 ]

1 голос
/ 05 марта 2012

Вы переместили свой javascript в .js, к которому непосредственно обращается браузер?IE: Если вы просматриваете источник, значит, вы видите <?php ... ?> в коде javascript?

Мне кажется, что PHP не анализируется.Если это не так, то не могли бы вы уточнить.

Если вам нужно включить переменные PHP в ваш javascript, вы должны использовать CI для генерации JS-страницы для включения.Вы даже можете создать представление, которое является чисто JS, и назвать его как обычную страницу.

В противном случае, если вы хотите отделить JS от CI, вы должны ссылаться на переменные JS вместо PHP.Затем где-нибудь на странице CI определите их с помощью тега <script>var jsVar = <?php echo phpvar(); ?></script>.

0 голосов
/ 06 марта 2012

Когда вы перемещаете файл js в его собственный файл, переменные php больше не будут доступны. Вы можете либо переместить js-код обратно в файл представления, либо получить URL через 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!");
    } 
  });
}); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...