我和Codeigniter一起工作,我想解决以下问题。
我试图ajaxify我的项目,这工作完美。
AJAX onclick事件起作用了。
但当我通过浏览器访问网址时(例如,通过外部网站访问我的主页)
当然,不会显示任何内容,因为它不是 AJAX 请求。
我试了几样东西,但我都做不好。
文件:应用程序/核心/我的控制器
class MY_Controller extends CI_Controller
{
protected $templatedata = array();
public function __construct()
{
parent::__construct();
//collect all css, js stuff
//$this->templatedata['css'] = all css stuff and so on
}
public function __destruct()
{
parent::__destruct();
echo $this->load->view('deskapp2/html/index',$this->templatedata,true);
}
}
所以首先我收集我的css和js文件。
在析构函数中,我回显我的主模板。
文件:应用程序/视图/桌面应用程序2/html/索引
<html>
<head>
<!-- loop css files -->
</head>
<body>
<!-- part of the menu -->
<li><a class="loveit" rel="index" href="<?php echo $base;?>welcome">Test 1</a></li>
<li><a class="loveit" rel="mytest" href="<?php echo $base;?>welcome/mytest">Test 2</a></li>
<!-- this is for the ajax-request -->
<div id="showmystuff"></div>
<!-- this is for the non-ajax-request -->
<?php echo $content;?>
<!-- other js files -->
<script type="text/javascript">
$(document).ready(function(){
$('.loveit').click(function (e) {
var targetUrl = $(this).attr('href');
var targetUri = $(this).attr('rel');
var arrUrl = targetUri.split('/');
//alert(arrUrl);
//url:"http://localhost/3113/public/ajax/index"
e.preventDefault();
window.history.pushState("","",targetUrl);
$.ajax({
url:"http://localhost/3113/public/ajax/index",
type: "POST",
data:{arr:targetUri},
dataType:"html",
success:function(data){
//alert('test');
$('#showmystuff').html('<b>'+data+'</b>');
},
error:function (){
alert('Something went wrong');
},
});
});
});
</script>
</body>
</html>
文件:控制器/ AJAX .php
这个控制器用于 AJAX 调用。
class Ajax extends CommonController {
public function __construct()
{
parent::__construct();
}
public function index()
{
if($this->input->is_ajax_request())
{
echo 'You are here: '.$this->input->post('arr'); //shows the full uri-string of the link which is clicked, see javascript in index.html
}
}
public function __destruct()
{
parent::__destruct();
}
}
当然,我的计划是根据URI从数据库加载所有内容。
文件:控制器/欢迎.php
class Welcome extends FrontendController {
public function __construct()
{
parent::__construct();
//some stuff
}
public function mytest()
{
if($this->input->is_ajax_request())
{
echo $this->load->view('welcome_message', NULL, true);
}
else
{
$this->templatedata['content'] = 'some stuff';
}
}
public function index()
{
if( !$this->input->is_ajax_request())
{
$this->templatedata['content'] = 'load from db...';
}
}
public function __destruct()
{
parent::__destruct();
}
}
我知道Ajax控制器并不是真正必要的。:D
我只是玩玩。
摘要:
如何区分ajax请求和非ajax请求?
有什么提示吗?:)
感谢所有读到这篇文章的人。
就像我说的,我不是职业球员,我只是到处打球来提高自己。
1条答案
按热度按时间5rgfhyps1#
很难可靠地区分 AJAX 调用、浏览器链接请求或页面表单请求,因为它们都支持HTTP方法,如POST、GET、DELETE和Put,唯一的例外是浏览器链接请求只能使用GET方法。
区分它们的一个解决方案是在客户端的 AJAX 请求中包含一个唯一的头纯ajax示例:
jQuery. AJAX 示例
您可以检查PHP代码中是否存在这个头,以确定请求是否通过 AJAX 发送。
PHP代码示例: