简体   繁体   English

如何获得使用Ajax和Codeigniter填充的表单

[英]How do I get a form populated using ajax and codeigniter

I am trying to teach myself code igniter and mvc. 我正在尝试教自己代码点火器和mvc。 I have a working site in php that allows the input of an isbn number and returns the title, rank etc. I use ajax to get the information from amazon and then put it into the existing form. 我在php中有一个工作站点,允许输入isbn数字并返回标题,等级等。我使用ajax从亚马逊获取信息,然后将其放入现有表单中。 This works great, now i am trying to convert it to code igniter. 这很好用,现在我正尝试将其转换为代码点火器。 My view is buybackmws.php and looks like this: 我的看法是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() ?>

my js with the ajax is buybackmws.js: 我的带有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 is: 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

When I test it, and look at what is shown in the response tab, the information is there. 当我对其进行测试并查看“响应”选项卡中显示的内容时,信息就在那里。 My console.log is not doing anything so i don't think the information is being returned to the js. 我的console.log没有做任何事情,所以我认为信息不会返回给js。 I am therefore having an issue getting everything into the view. 因此,我在将所有内容都纳入视野时遇到了问题。 How do I do this? 我该怎么做呢?

EDIT: I got the console.log in the ajax success to show the results in Firebug, but they are still not populating the form. 编辑:我在ajax成功中获得console.log,以在Firebug中显示结果,但它们仍未填充表格。 Any ideas?? 有任何想法吗??

you are using datatype json for ajax . 您正在将数据类型json用于ajax。 Remove json datatype and use 删除json数据类型并使用

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

you can now access data.view in ajax 您现在可以在ajax中访问data.view

OR 要么

with json in datatype 在数据类型中使用json

Use 采用

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

Also if you redirect in controller from ajax it will not work for page . 另外,如果您从ajax重定向控制器,则该方法不适用于page。 you need to redirect in ajax after success return data 成功返回数据后,您需要在ajax中重定向

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM