我使用pushstate / popstate构建一个演示,但是我想知道如果Davis.js js路由lib如何在这里使用,有谁可以帮助我以下示例?
谢谢!
与davis.js index.php
print"<a class=\"a\" href=\"$result[id]\"></a>";
if($_GET['id']){
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){
print"
<div class=\"wrapb\">
<div class=\"b\"></div>
<div class=\"close\"></div>
</div>
";
}
}
JS
var app = Davis(function(){
this.get('?id=:name', function(req){
var b = $(req).filter('.wrapb').html();
$('.a').before(b);
$('.close').click(function(){
history.back();
});
})
})
答案 0 :(得分:2)
我认为这应该是你想要实现的目标:
var app = Davis(function () {
this.get('/', function (req) {
var xhr = $.ajax('/', {
data: { id: req.params.id },
dataType: 'html'
})
xhr.then(function (data) {
var html = $(data)
html.find('.close').on('click', function () {
history.back()
})
$('.a').before(html)
})
})
})
产生给路由处理程序的req
对象不是ajax请求,它是表示路径“请求”的对象,在本例中为/
,更多来自{{ 3}}
当您在路由回调中单击链接时,您必须执行任何您希望发生的工作,在您的情况下,您似乎想要向服务器发出请求,该请求将使用剪切的html响应(I'我不是PHP开发人员所以这可能是错误的)。然后,您希望在当前文档中的链接后附加此html。
戴维斯的设计不允许基于查询参数进行路由,因此您不应在路径定义中使用它们,因此我将其更改为/
。