我是ajax的初学者(根本不知道jquery)所以我一直在使用简单的ajax而没有jquery,我想要做的就是简单地调用codeigniter' s控制器方法。不知道我错了什么。这是我的ajax功能和控制器:
function usernameOnChange() {
var username = document.getElementById("register_username").value;
if (username.length == 0) {
document.getElementById("usernameGlyph").className = "glyphicon glyphicon-remove";
return;
} else {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("usernameGlyph").className = 'glyphicon glyphicon-ok';
}
};
var link = "<?php echo base_url("index.php/Test/checkUsername?username="); ?>" + username ;
xmlhttp.open("GET", link, true);
xmlhttp.send();
}
}
这是我的控制器(它仍然是测试控制器只是为了看到我的ajax-codeigniter php连接正常工作)。
<?php
class Test extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->helper("url");
$this->load->library("form_validation");
$this->load->helper("security");
$this->load->helper("form");
}
public function checkUsername($username) {
echo "<script>alert('CODEIGNITER RESPONDED!');</scirpt>";
}
}
?>
提前致谢!
答案 0 :(得分:2)
在开始使用ajax之前,需要了解ajax需要从PHP获得良好的输出才能获得完美的调用结果。在您的codeigniter控制器中,您正在回显脚本标记。使用ajax调用时请不要这样做。
示例Codeigniter控制器功能
<?php
class Test extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->helper("url");
$this->load->library("form_validation");
$this->load->helper("security");
$this->load->helper("form");
}
public function checkUsername($username) {
$output = array('status'=>200,"message"=>"Your Ajax is called");
header('Content-Type:application/json;');//Please do not forgot to set headers
echo json_encode($output);
}
}
这里控制器将提供javascript可以轻松读取的完美输出
对于jQuery
<script type="text/javascript">
$.get('<?php echo base_url("index.php/Test/checkUsername?username=xyz"); ?>',function(data){
alert(data['message']);
});
</script>
答案 1 :(得分:1)
首先,你的这一行会产生错误或意外结果。
var link = "<?php echo base_url("index.php/Test/checkUsername?username="); ?>" + username ;
//double quote inside double quote
应该是这样的
var link = "<?php echo base_url('index.php/Test/checkUsername?username='); ?>" + username ;
您还需要了解site_url
和base_url函数如何生成链接
最后,我认为您的链接应该是这样的。
var link = "<?php echo base_url('index.php/Test/checkUsername/'); ?>" + username ;
//you can remove index.php if you set your config file properly.
答案 2 :(得分:1)
好的,所以这是我发现的解决方案,它运行正常。如果当前输入的登录用户名存在于数据库中,它会将输入字段的图标范围更改为勾选。否则,它会将图标更改为交叉。别忘了添加“&amp;”通过“获取”多个参数向控制器方法发送时。
$("#login_username").keyup(function() {
$.ajax({
type: 'GET',
url: '<?php echo base_url().'index.php/Test/checkLoginUsername'; ?>',
data: 'type=' + $('#logintype').is(':checked') + '&username=' + $("#login_username").val(),
success: function(newClassType) {
$("#usernameLoginGlyph").removeClass().addClass(newClassType);
}
})
});
这是我的控制器方法,它是echos结果类的图标类型。
public function checkLoginUsername() {
// type = true for customer; false for artist
$type = $this->input->get('type');
$username = $this->input->get('username');
if ($type === "true") {
if ($username === "" || $this->Customer_model->getCustomerByUsername($username)) {
echo "glyphicon glyphicon-ok";
} else {
echo "glyphicon glyphicon-remove";
}
} else {
if ($username === "" || $this->Artist_model->getArtistByUsername($username)) {
echo "glyphicon glyphicon-ok";
} else {
echo "glyphicon glyphicon-remove";
}
}
}