在AJAX响应中执行javascript - Codeigniter

时间:2014-07-31 19:37:14

标签: javascript php jquery ajax codeigniter

我正在使用Codigniter重做网站。我有以下控制器代码:

public function get_topics()
{          
    $topic = $this->input->post('input_data');
    $topics = $this->firstcoast_model->get_topics_like($topic); 
    foreach ($topics as $val) {
        echo "<pre id = \"pre_" . $val['id'] . "\">";
        echo $val['formula'];
        echo "<br />";

        // generate a unique javascript file.
        $f = "file_" . $val['id'] . ".js";

        if (!file_exists($f));
        {
            $file = fopen($f,"w");
            $js = "\$(\"#button_" . $val['id'] . "\").click(function(){\$(\"#pre_" . $val['id'] . "\").hide();});"; 
            fwrite($file,$js);
            fclose($file);
         }

         echo "<script src=\"file_" . $val['id'] . ".js\"></script>";
         echo "<button id=\"button_" . $val['id'] . "\">Hide</button>";
         echo "</pre>";
     } 
 }

对函数进行AJAX调用以检索公式列表的基本思路。 javascript的目的是能够隐藏任何公式 隐藏&lt; pre&gt; &LT; /pre&GT;围绕它们的标签我生成的js文件(即file_1.js)看起来像:

$("#button_1").click(function(){$("#pre_1").hide();});

,按钮代码为:

<button id="button_1">Hide</button>

问题在于它不起作用。文件生成,但点击“隐藏” 按钮什么都不做。令人费解的是,完全相同的代码在原始网站上工作,我只是对生成相同代码的PHP文件进行AJAX调用。

有什么想法可以在这里发生什么?

编辑:

在我使用的旧网站上:

         $query = "SELECT * FROM topics WHERE term LIKE '%" . $term . "%'";
         $result = mysql_query($query);

        while ($val = mysql_fetch_array($result))
         { 
          echo "<pre id = \"pre_" . $val['id'] . "\">";
          etc.
          etc.
         }

一切正常。如果我现在将while循环的结果放入数组然后对其进行foreach循环,则结果非常间歇。我想知道foreach循环是否是问题。

1 个答案:

答案 0 :(得分:0)

我认为您可以在json响应中返回列表按钮

public function get_topics()
{          
    $topic = $this->input->post('input_data');
    $topics = $this->firstcoast_model->get_topics_like($topic);         
    $response = array('buttons' => $topics);
    header('Content-Type: application/json');
    echo json_encode( $arr );
}

因此客户端可以解析要隐藏的按钮元素。

<script type="text/javascript">
$(document).ready(function(){
  $('somEL').on('submit', function() { // This event fires when a somEl loaded          
      $.ajax({
          url: 'url to getTopics() controller',
          type : "POST",
          data: 'input_data=' + $(this).val(), // change this based on your input name
          dataType: 'json', // Choosing a JSON datatype
          success: function(data) 
          {
              for (var btn in data.buttons) {
                  $(btn).hide();
              }
          }
      });
      return false; // prevent page from refreshing 
  });
});
</script>