2011-07-15 27 views
0

我正在使用codeigniter框架,我的问题是我无法将正确的值从php传递给js。此代码用于从用户输入到数据库的可用性检查。如何将PHP值传递给JS。在CI

这里是我的控制器

class Ajax extends CI_Controller 
{ 
    function __construct() 
    { 
     parent::__construct(); 
    } 

    function index() 
    { 
     $this->output->set_output("This is an AJAX endpoint!"); 
    } 

    function activityCode_availability() 
    { 
     $activityCode = trim($this->input->post("activityCode")); 
     $activityCode = mysql_escape_string($activityCode); 

     $msg = $this->Activity_model->check_activityCode($activityCode); 


     if($msg == 1) 
     { 
      $a= '<font color="#cc0000"><b>'.$activityCode.'</b> is already in use.</font>'; 
      return $a; 
     } 
     else 
     { 
      $b = 'OK'; 
      return $b; 
     } 
    } 
} 

这是我的看法

<?php 
$activityCode = array(
      'name' => 'activityCode', 
      'id'  => 'activityCode' 
     ); 

echo form_input($activityCode); 
?> 
<span id="availability_status"></span> 

这里是我的模型

function check_activityCode($activityCode) 
{ 
     $query = $this->db->query("SELECT activityCode 
      FROM ami_activity 
      WHERE activityCode = '$activityCode'"); 

     return $query->num_rows(); 
} 

这里是我的Javascript

(document).ready(function(){ 
    $('#activityCode').change(activity_check); 
}); 


function activity_check() 
{ 
    var activityCode = $('#activityCode').val(); 
    var msgbox = $("#availability_status"); 

    if(activityCode.length > 2) 
    { 
     $("#availability_status").html('<img src="<?php echo base_url();?>img/loader.gif">&nbsp;Checking availability.'); 

     $.ajax({ 
      type: "POST", 
      url: "/index.php/ajax/activityCode_availability", 
      data: "activityCode="+ activityCode, 
      success: function(msg){ 
      $("#availability_status").ajaxComplete(function(event, request){ 
       if(msg == 'OK') 
       { 
        $("#activityCode").removeClass("red"); // remove red color 
        $("#activityCode").addClass("green"); // add green color 
        msgbox.html('<img src="<?php echo base_url();?>img/green_check.gif"> <font color="Green"> Available </font>'); 
       } 
       else 
       { 
        $("#activityCode").removeClass("green"); // remove green color 
        $("#activityCode").addClass("red"); // add red color 
        msgbox.html(msg); 
       } 
      }); 
     } 
    }); 

} 
else 
{ 
    $("#activityCode").addClass("red"); // add red color 
    $("#availability_status").html('<font color="#cc0000">Enter valid User Name</font>'); 
} 
} 

任何想法都非常感谢。先谢谢了。

感谢,

卡纸

+0

抱歉,但是这是一个整个大量的代码。它有什么问题?通过使用PHP中的值回显js变量,您可以将变量从PHP传递给javascript。 –

+1

您正在使用mysql_escape_string,不需要的地方,并以不推荐的方式:你应该使用mysql_real_escape_string,如果有的话。如果您调用$ this-> db-> escape()或使用Active Record,那么这是不必要的。 –

+0

是的。感谢那些信息Damien先生..我很抱歉,这是我第一次使用CI。无论如何,再次感谢:) –

回答

0

你应该呼应$ A/$ B变量未归还。目前,ajax请求没有任何输出。 您可以使用Firebug for Firefox或Webkit浏览器(Chrome,Safari)中的Inspector Console来查看您从ajax请求获得的实际响应。

+0

是的,我已经做到了。回声$ a和$ b这是我的第一个代码,但它不起作用,所以我尝试返回它,但它的相同的错误。我无法将php的值传递给我的js。对不起,这是我第一次使用CI。谢谢@zbrox –

+0

我已经在本地测试CI安装中复制了您的代码。我在运行时遇到了两个问题 - 1)正如我所提到的,您应该回显ajax返回值,而不是返回它们,因为您没有处理对其他PHP代码的响应,而是将它输出到ajax请求2)在(document).ready前面有一个缺失的美元符号,但我想这只是在这里粘贴代码时的一个错字。 除了这一切似乎工作。你是否用Firebug调试过这个例子?你看到ajax请求被发送吗? – zbrox

0

感谢您的帮助,它现在正在工作。我用萤火虫找出了我的错误。在我的JS上有我的代码1两个错误,1个在我的MySQL语法

这里是我的错误

1.) url: "/index.php/ajax/activityCode_availability" 
2.) on my model I included single quote on my condition 
    $query = $this->db->query("SELECT activityCode 
     FROM survey_activity 
     WHERE activityCode = '$activityCode'"); 

这里是我的解决方案

1.) url: "my_folder/index.php/ajax/activityCode_availability" 
2.) on my model I removed the single quote on my query condition 
    $query = $this->db->query("SELECT activityCode 
     FROM survey_activity 
     WHERE activityCode = $activityCode"); 

我的AJAX请求被正常发送,但在不同的网址。它发送localhost/index.php/activityCode_availability而不是localhost/my_folder/index.php/activityCode_availability,因此它在我的本地主机服务器的默认页面上发送。而且我实现了echo $ a和$ b而不是返回它。感谢您的建议。 :)

感谢,

卡纸