如何使用ajax和codeigniter填充表单

时间:2014-02-14 16:40:13

标签: javascript php jquery ajax codeigniter

我正在尝试自学代码点火器和mvc。我在php中有一个工作站点,允许输入isbn号码并返回标题,等级等。我使用ajax从亚马逊获取信息,然后将其放入现有表格中。这很好用,现在我正在尝试将其转换为代码点火器。我的观点是buybackmws.php,看起来像这样:

    <?php echo validation_errors();?>
<?php echo form_open('buyback', $title);?>

    <table height="220">
            <tr>
                <td><label>ISBN</label></td>
                <td><input type="text" id="isbn" name="isbn" value="<?php echo set_value('isbn'); ?>" /></td>
                <td></td>
                <td rowspan=7><a id="detailURL" href="#" target="_blank"><img id="bookCover" src="<?php echo base_url();?>images/imgNotFound.gif" height="200px" /></a></td>


            </tr>
            <tr>
                <td><label for="quantity" class="label">Quantity</label></td>
                <td><input type="text" id="quantity" name="quantity" value="<?php echo set_value('quantity'); ?>"/></td>
                <td></td>
            </tr>
            <tr>
                <td><label for="payPrice" class="label">Price to Pay</label></td>
                <td><input type="text" id="payPrice" name="payPrice"/></td>
                <td></td>
            </tr>
            <tr>
                <td><label>Edition</label></td>
                <td><input type="text" id="edition" name="edition" readonly="readonly"/></td>
                <td></td>
            </tr>
            <tr>
                <td><label>Title</label></td>
                <td><input type="text" id="title" name="title"/></td>
                <td></td>
            </tr>
            <tr>
                <td><label>Sales Rank</label></td>
                <td><input type="text" id="salesRank" name="salesRank" readonly="readonly" /></td>
                <td></td>
            </tr>

            <tr>
                <td></td><td><input type="button" id="buy" value="Buy" /></td><td></td>
    </table>
    <?php echo form_close() ?>

我与ajax的js是buybackmws.js:

    $('#isbn').keydown(function () {
    //retrieve price to pay (and other data)
    var isbn = $('#isbn').val(); 

        $('#quantity').val('0'); //default quantity to 0
    $('#buy').attr('disabled', false).css('backgroundColor', '');
    $('#quantity').css('border', '');
    $('#payPrice').css('border', '');
    $('#payPrice').css('backgroundColor', '');
    $('#payPrice').css('color', '');

        $.ajax({
            type: "POST",
            url: ' ../verifybuyback/title',
            async:false,
            dataType: "json",
            data: ({isbn: isbn }),
            success: function(data){
               console.log(data);
                $('#title').val(data.title);
                $('#salesRank').val(data.salesRank);
                $('#edition').val(data.edition);
        $('#binding').val(data.binding);
                $("#detailURL").attr("href",data.DetailURL);
        } //end of success
});

verifybuyback是:

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

class Verifybuyback extends CI_Controller {
     function __construct()
{
    parent::__construct();
    $this->load->model('amz','',TRUE);
    $this->load->helper('amazon');
}

function title()
{
    $this->load->library('form_validation');

    $this->form_validation->set_rules('isbn', 'ISBN','trim|required|xss_clean|callback_title_check' );

if($this->form_validation->run('title')==FALSE)
{
    //Field validation failed.  User redirected to login page
 $this->load->view('buybackmws');

}
else
{
    //GOTO RESTRICTED AREAS
    redirect('buybackmws', 'refresh');
}
}

function title_check()
{
    //Field validation succeeded.  Validate against database
    $isbn=$this->input->post('isbn');

    //QUERY AMAZON FOR THE INFORMATION

    $result = basic($isbn);

    if($this->session->userdata('amazon'))
    {
     $sess_array = array();
        $result=$this->session->userdata('amazon');

            $sess_array=array(
                'title'=>$result['Title'],
                'rank'=>$result['SalesRank'],

            ); 

    }
    else
    {
        $this->form_validation->set_message('get_title', 'Invalid ISBN number');
        return false;
    }
}

} //END OF BUYBACK

当我测试它,并查看响应选项卡中显示的内容时,信息就在那里。我的console.log没有做任何事情,所以我认为这些信息不会被返回给js。因此,我在将所有内容都纳入视图时遇到了问题。我该怎么做?

编辑:我在ajax成功中获得了console.log以在Firebug中显示结果,但是他们仍然没有填充表单。任何想法??

1 个答案:

答案 0 :(得分:0)

您正在使用数据类型json for ajax。删除json数据类型并使用

$data['view'] = $this->load->view($view, $this->data, true);
$this->output->set_output($data);

您现在可以访问ajax中的data.view

OR

使用数据类型为

的json

使用

$data['view'] = $this->load->view($view, $this->data, true);
$this->output->set_content_type('application/json');
$this->output->set_output(json_encode($data));

此外,如果您从ajax重定向控制器,它将不适用于页面。成功返回数据后需要在ajax中重定向