0

我有这个问题。单击锚点时如何从文件中获取数据,

这是我在控制器中的功能。

function change_log_year_view($year) {
    $file = $this->get_file($year);
    $message = $this->generate_message_body(read_file($file));


    if (!empty($year)) {
        $data['id'] = $this->session->userdata('id');
        $data['message'] = $message;
        $this->load->view('change_log_view', $data);
    }

这是视图。

        echo anchor('changelog/change_log_year_view/' . '2013', 'Change Log 2013');
        echo '|' . anchor('changelog/change_log_year_view/' . '2014', 'Change Log 2014');
        echo '|' . anchor('changelog/change_log_year_view/' . '2015', 'Change Log 2015');
        <text style="white-space: pre-line;"  id="message"><?php echo $message; ?></text>

这种方法奏效了。但是如果我使用 jquery 或 javascript 可以吗?如果可以的话脚本看起来如何,谢谢。

4

3 回答 3

1

首先更改设置$year参数的默认值$year = ''以防止出错。

基本上你的控制器应该回显数据,而不是返回。所以$message直接回显。

echo $this->generate_message_body(read_file($file));

PHP (控制器文件)

function change_log_year_view($year = '')
{
    if (empty($year)) {
        die('Optional Error Message...');
    }

    $file = $this->get_file($year);
    $message = $this->generate_message_body(read_file($file));

    // Is this necessary? I assume NO,
    // because you didn't show any usage of $id variable in your question.
    // $data['id'] = $this->session->userdata('id');

    // $data['message'] = $message;
    // $this->load->view('change_log_view', $data);

    echo $message;
}

注意:
and$this->get_file()$this->generate_message_body()OP 自己的方法(不是CI 核心)

JS 使用 jQuery

$.ajax({
    type     : 'GET',  // or 'POST', whatever you want.
    dataType : 'text', // output_value will be a plain text string.
    url      : 'YOUR_ANCHOR_TAG_URL',
    success  : function(output_value){
        // output_value is the result.
        // do what you want with it.
    }
});

注意:
插入您的控制器 URL 地址(不要忘记YEAR变量)而不是YOUR_ANCHOR_TAG_URL短语。

您可以通过以下方式自动获取 URL$('your_link_selector').attr('href');

就像一个演示:

设置class="ajax-call"为您的<a>标签。

$('.ajax-call').on('click', function(e) {
    e.preventDefault();
    var _this = $(this);
    $.ajax({
        type     : 'GET',
        dataType : 'text',
        url      : _this.attr('href'),
        success  : function(output_value){
            // output_value is the result.
            // do what you want with it.
        }
    });
}

作为一个附带问题:<text>标签是什么?新一代标记?我以前没见过这个,使用<span>for inlineelement 或<p>for block-level

于 2013-06-11T12:05:00.000 回答
0

它可以使用 jQuery ajax 来完成。您可以使用 ajax 调用您的控制器方法。

于 2013-06-11T05:09:33.340 回答
0

您可以像这样在 CI 中使用 Ajax:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ajax with CI</title>
<script type='text/javascript' src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(document).ready(function () {
    $('.ci_link').on('click',function(){
        // get link href string
        var linkHref = $(this).attr('href');
        // get year from string
        var getYearFromLinkHref = linkHref.split('/')[2];

        // your ajax param to send CI Controller
        var sendAjaxDataToController = {year:getYearFromLinkHref};

        // if you are using CSRF token in CI then
        // token name CI Function
        var csrftokenname = "<?php echo $this->security->get_csrf_token_name()?>";
        // token value CI Function
        var csrftokenvalue = "<?php echo $this->security->get_csrf_hash();?>";

        var sendAjaxDataToController = {year:getYearFromLinkHref,csrftokenname:csrftokenvalue};

        // Ajax Code Start
        $.ajax({
            type: "POST",           
            data: $.param(sendAjaxDataToController ),
            url: "http://www.yoursite.com/Changelog/change_log_year_view",          
            success: ajaxSucceess,
            error: ajaxError
        });
        // Ajax Code End

        // Code for Success Handler
        function ajaxSucceess(response) {
            console.log(response);
        }

        // Code for Error Handler
        function ajaxError(response) {
            console.log(response.status + ' ' + response.statusText);
        }
    }); 
});
</script>
</head>
<body></body>
</html>

// 你的控制器代码

<?php
if (!defined('BASEPATH'))exit('No direct script access allowed');

class Changelog extends CI_Controller {

    /**
     * Chnage Log Year Function
     */
    function change_log_year_view() {
        // get year data from ajax post
        $year = $this->input->post('year');     
        $file = $this->get_file($year);
        $message = $this->generate_message_body(read_file($file));
        if (!empty($year)) {
            $data['id'] = $this->session->userdata('id');
            $data['message'] = $message;
            $this->load->view('change_log_view', $data);
        }

}
?>

// 你的锚代码应该是这样的:

<?php 
// create array attribute for link
$linkAttr = array('title'=>'your link title','class'=>'ci_link');
// show a link with attribute
echo anchor('changelog/change_log_year_view/2013', 'Change Log 2013', $linkAttr);
?>

// 你的 CI 应用程序/config/autoload.php

/*
| -------------------------------------------------------------------
|  Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
|   $autoload['helper'] = array('url', 'file');
*/

$autoload['helper'] = array('url', 'form');
于 2013-06-11T13:34:38.030 回答