我正在构建一个Web应用程序,让用户可以使用Q& A格式跟踪讨论主题。为此,在显示问题时,每个问题旁边都有一个“关注”按钮。我希望用户能够在不重新加载页面的情况下关注这些线程,从而使用AJAX。所以,我希望AJAX调用:
1)提交更新数据库记录以下关系的表格;和 2)将“关注”提交按钮替换为“关注”
这是我的JavaScript代码:
$("#submitFollow").click(function() {
var type = $("input#type").val();
var u_id = $("input#u_id").val();
var e_id = $("input#e_id").val();
var dataString = 'type='+ type + '&u_id=' + u_id + '&e_id=' + e_id;
$.ajax({
type: "POST",
url: "<?=site_url()?>/follow/ajaxFollow",
data: dataString,
success: function() {
$('#following').html("Following");
.hide()
.fadeIn(1500)
}
});
return false;
});
});
以下是我的表单代码。我删除了保持表单不定期提交的操作和方法。我尝试使用JS来阻止默认,但这不起作用。 (这些值由模型填写):
<div id="following">
<form id="followForm" action="" method="">
<input type="hidden" name="type" id="type" value="question">
<input type="hidden" name="u_id" id="u_id" value="1">
<input type="hidden" value="12" name="e_id" id="e_id">
<input type="submit" id="submitFollow" value="Follow Question" class="submitFollow">
</form>
</div>
现在控制器非常简单 - 只需要获取post变量数组并将它们直接提交给数据库。
我对JavaScript不是太擅长,所以如果我把时间用在一个简单的问题上,我很抱歉。
答案 0 :(得分:2)
我只是在这里一般,但希望它会有所帮助。如果是我,我会做以下事情:
这是一些从codeigniter生成的html:
<div>
questions 1
</div>
<div>
<a class="follow" href="http://example.com/follow/question/1">Follow Question 1</a>
</div>
<div>
questions 2
</div>
<div>
<a class="follow" href="http://example.com/follow/question/2">Follow Question 2</a>
</div>
然后让所有内容在没有javascript的情况下运行(稍后再添加)。所以这里是codeigniter控制器,带有一些通用代码:
<?php
class Follow extends Controller {
function Follow()
{
parent::Controller();
$this->auth->restrict_to_admin();
}
function question($id = NULL)
{
if($id)
{
//get question from database using the id
//i assume somehow the user is logged in? use their id where applicable
echo '<span>You are now following this question</span>';
}
}
}
/* End of file follow.php */
现在,无论他们是否使用javascript,它都会有效。这里是你添加javascript的地方(我假设你正在使用jquery?)。如果没有,它将足够接近。
$(document).ready(function(){
$('follow').click(function(event){
event.preventDefault();
var followUrl = $(this).attr('href');
//do ajax call here.
$.post(
followUrl,
{
//any paramaters you need to add can
//go here in this format:
//param_key: param_value
},
function(responseText){
//here you can update the clicked link to say something
//like "you are now following this question"
//the responseText var will have whatever text the server responds with.
//just responsd with html
},
'html'
);
});
});