2012-03-05 15 views
0

私の当初の目標は、ボタンプレスで実行するPHPファイルを取得することでした。私はajaxを使いました。 javascriptがビューにあるとき、それは働いた。Codeigniter、ボタン押しで実行するAjaxを取得する

しかし、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を否定するということです。のように、それは単に負荷をかけることはありません。 $ 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ファイルが実際に正しいパスに向けられていることを確認しました。

誰かがこれを行う正しい方法を教えてください。ありがとうございました!

答えて

1

ブラウザで直接アクセスしている.jsにjavascriptを移動しましたか? I.E:ソースを表示すると、<?php ... ?>がjavascriptコードに表示されますか?

私には、PHPが解析されていないかのように聞こえます。そうでない場合は、明確にしてください。

javascriptにPHP変数を含める必要がある場合は、CIを使用してJSページを生成して含める必要があります。純粋にJSのビューを作成し、それを通常のページのように呼び出すこともできます。

それ以外の場合は、CIからJSを分離するには、PHPではなくJS変数を参照する必要があります。どこかのCIページで、<script>var jsVar = <?php echo phpvar(); ?></script>タグで定義します。

+0

今ではそれほど明白と思われます。ありがとうございました。 –

+0

+1実際に質問を読んで... ugh – KTastrophy

+0

問題はありません!私が言ったように、あなたはJSコンテンツだけで見ることができ、それにsomething.js.phpという名前をつけて、ユーザの視点からサーバ上の実際の.jsファイルのように見えるようにすることもできます。 GL –

0

jsファイルを自分のファイルに移動すると、php変数にアクセスできなくなります。 jsコードをビューファイルに戻したり、javascriptでURLを取得したりすることができます。例えば以下を参照してください。

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!"); 
    } 
    }); 
}); 
関連する問題