【问题标题】:Jquery Ajax is not working with CodeigniterJquery Ajax 不适用于 Codeigniter
【发布时间】:2016-04-07 08:32:05
【问题描述】:

我是 ajax 初学者,在这里我尝试使用 Ajax 在同一页面中显示文本框值。

我的控制器代码:

<?php
class Merchant extends CI_Controller
 {

    public function ajaxtest()
    { 

     $this->load->helper('url');
     $this->load->view('ajaxtest');
     $fullname = $this->input->post("fullname");
     echo $fullname;

    }
}
?>

这是我的视图代码:

<head>
 <script src="<?php echo base_url();?>assets/js/jquery-latest.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){   

    $("#getinfo").click(function()
    {   

     $.ajax({
         type: "POST",
         url: "<?php echo base_url(); ?>merchant/ajaxtest",
         data: {textbox: $("#fullname").val()},
         dataType: "text",  
         cache:false,
         success: 
              function(data){                    
                $('#mytext').html(data);
              }
          });
     return false;
 });
 });

</script>
 </head>
 <body>
 <form method="post">
        <input  type="text" id="fullname"/>
        <input  type="button" value="getinfo" id="getinfo"/>      
      <span id="mytext"></span>
 </form>

 </body>

当我单击按钮 getinfo 时,我想将文本框中的文本显示为跨度文本。但现在它什么都没有显示..

更新:

根据专家的意见,我编辑了一些文本(见我的编辑说明),现在当我点击按钮时,它再次显示一个文本框和一个按钮.. !!

【问题讨论】:

  • 您是否忘记了 URL 中的文件扩展名?现在它只指向"merchant/ajaxtest"。如果正确,您是否收到警报,或者 AJAX 调用是否静音?如果是后者,你应该在你的 AJAX 调用中添加一个error 函数,这样你就可以捕获 jqHXR。
  • 我想知道,控制器中的哪些内容返回到ajax?
  • 我不确定您在评论中要问什么。如果您使用 Chrome 或 FireFox 之类的浏览器,请使用您的开发人员工具查看您的 php 请求返回的内容。否则,使用alert()console.log() 调用转储php 返回给您的数据以进行调试。此外,您可能应该使用 `$('#mytext').append(data);` 来代替。
  • 在浏览器中打开 ajax 链接以检查来自 base_url + "merchant/ajaxtest" 的响应或尝试使用 index.php/merchant/ajaxtest 进行检查
  • @Infolet.org 他的意思是没有已声明的base_url javascript 变量,看看他的意思是把它添加到你的@987654330 的顶部@, alert(base_url + "merchant/ajaxtest"); 并且您应该看到您尝试 AJAX 的网址(即错误的网址)

标签: javascript php jquery ajax codeigniter


【解决方案1】:

您是否使用 Javascript 上的链接设置了 base_url 变量? 因为您的帖子网址包含此变量,您需要设置它以使其工作。所以用base_url链接初始化变量。

请参阅下面的更正示例。设置您的域而不是 yourbaseurl.com

<script type="text/javascript">
$(document).ready(function(){   
    var base_url='http://yourbaseurl.com/index.php/';
    $("#getinfo").click(function()
    {   

     $.ajax({
         type: "POST",
         url: base_url + "merchant/ajaxtest", 
         data: {textbox: $("#fullname").val()},
         dataType: "text",  
         cache:false,
         success: 
              function(data){                    
                $('#mytext').html(data);
              }
          });
     return false;
 });
 });

</script>

【讨论】:

    【解决方案2】:

    您的 base_url 变量似乎在您的 JavaScript 中未定义。

    获取基本 URL 的一种简单方法是在隐藏的输入中回显它,然后在 JS 代码中获取该输入的值:

    HTML

    <input type='hidden' id="baseUrl" value="<?php  echo base_url(); ?>" /> 
    

    JS

    var base_url = $('#baseUrl').val(); 
    
    
    $.ajax({
         type: "POST",
         url: base_url + "/merchant/ajaxtest", 
         data: {textbox: $("#fullname").val()},
         dataType: "text",  
         // ... 
    

    【讨论】:

    • 有一个错误,现在我编辑了我的问题,现在当我再次点击按钮时,一个带有按钮的文本框
    • 现在当我再次单击按钮时,会出现一个带有按钮的文本框,抱歉,您的句子不完整。再次点击会发生什么?
    【解决方案3】:

    您正在将文本框作为参数从您的 ajax 传递到控制器,并尝试获取名称为全名的 POST 数据。那是行不通的,因为您将参数名称作为文本框传递,请在您的帖子中访问它,如下所示:

    class Merchant extends CI_Controller
     {
    
        public function ajaxtest()
        { 
         $this->load->helper('url');
         //you dont need to load view so comment it
         //$this->load->view('ajaxtest');
         $fullname = $this->input->post("textbox"); //not fullname
         echo $fullname;
        }
    }
    

    js

    <script type="text/javascript">
    $(document).ready(function(){   
        var base_url='http://yourbaseurl.com/index.php/';
        $("#getinfo").click(function() {
    
        var fullname = $("#fullname").val();
        alert("Fullname:" + fullname); //do you get this alert   
    
         $.ajax({
             type: "POST",
             url: base_url + "merchant/ajaxtest", 
             data: {textbox: fullname},
             cache:false,
             success:function(data){
               alert("Response:" + data); //do you get this alert                 
               $('#mytext').html(data);
             }
         });
         return false;
     });
     });
    
    </script>
    

    【讨论】:

    • 我已根据您的建议更改了我的代码..这适用于常量字符串(echo 'hello'),但不返回发布的字符串..帮助我
    • @Infolet.org 你能改变你上面提到的js代码,看看你是否得到了两个警报..?
    • data: {textbox: fullname},检查你是如何获得帖子值的。这里是它的文本框。所以 echo $this->input->post('textbox');或回显 json_encode($_POST);出口;您可以看到 post 方法下的所有内容!
    【解决方案4】:

    试试这个:

    <base href="<?=base_url();?>">
    <script src="assets/js/jquery-latest.min.js"></script>
    

    这在 ajaxtest 中:

    $this->load->helper('url');
    

    并且还注释掉这个:

    // $this->load->view('ajaxtest');
    

    【讨论】:

    • 不工作..我认为jquery源没有问题。因为,tihs 代码有效: $(document).ready(function(){ $("#getinfo").click(function() { alert('ok');}
    • 重新下载jquery比
    【解决方案5】:

    这个回复可能有点晚了 - 但有人可能会在寻找解决方案时发现这个。 我在使用 Codeigniter 和 JQuery ajax/post response 时遇到了同样的问题。无论我尝试什么,我都无法让它发挥作用。 最后,原来是 php_error 导致了问题。删除它后,我的帖子/回复一切正常。

    【讨论】:

      猜你喜欢
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多