Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery pjax/djax和ajaxy的替代品_Jquery_Ajax_Drupal - Fatal编程技术网

Jquery pjax/djax和ajaxy的替代品

Jquery pjax/djax和ajaxy的替代品,jquery,ajax,drupal,Jquery,Ajax,Drupal,我在评估jQuery插件,以使用AJAX everywhere创建Drupal7站点。我一直在用。但它似乎并没有得到非常积极的维护 我找到的两种可能的解决方案是和。你对这些插件有什么经验 您知道还有哪些插件具有类似的功能?非常重要的特性是SEO友好性(最好使用pushState,这样就不会使用哈希。哈希用作不受支持的浏览器的后备)。而且还必须非常灵活,因为它必须与Drupal的HTML结构结合。Drupal提供了自己的HTML结构。您不需要像以前那样编写任何JavaScript代码。解决方案是S

我在评估jQuery插件,以使用AJAX everywhere创建Drupal7站点。我一直在用。但它似乎并没有得到非常积极的维护

我找到的两种可能的解决方案是和。你对这些插件有什么经验

您知道还有哪些插件具有类似的功能?非常重要的特性是SEO友好性(最好使用pushState,这样就不会使用哈希。哈希用作不受支持的浏览器的后备)。而且还必须非常灵活,因为它必须与Drupal的HTML结构结合。

Drupal提供了自己的HTML结构。您不需要像以前那样编写任何JavaScript代码。解决方案是SEO友好的。链接在其路径中以
nojs
元素输出,然后在框架使用时被
ajax
替换


有关API用法,请参见和示例模块。

因为您使用的是PHP和jQuery,最好的选择是我的项目,phery,它得到了积极维护,我在过去两年中一直在改进它

通过使用视图,您可以在单个ajax视图中分割站点,或者通过ajax使用完整的页面内容。它是SEO友好的,并且由于它使用事件委托,所有新元素都已经ajaxified了。它不强制使用历史API或哈希事件,您可以为自己决定最佳功能

为您的站点加载内容的全面AJAX将是(当然,只有容器,不包括菜单、页脚等)

var ever\u push=false;//需要铬
费里视野({
"容器":{
'exclude':['/blog'],//从中排除wordpress
“beforeSend”:函数(){
$('body,html')。滚动顶部(0);//转到顶部
},
“呈现”:函数(html、数据、passdata){
var$this=$(this);
nav_items.removeClass('current')。filter('..+data.controller)。addClass('current');//更新菜单
document.title=data.title;//设置文档标题
/*好的浏览器可以获得历史API*/
if(passdata的类型['popstate']=='undefined'){
window.history.pushState(data,data.title,data.url);
曾经推动=真;
}
_gaq.push([“_trackPageview”]);//谷歌分析
$(“#内容”)
.find(“>div”)
.animate({'opacity':0},375)//淡出
.承诺
.done(函数(){
$body.removeClass().addClass(data.body\u类);
$this.html(“”).html(html);
on_reload();//重新启动需要绑定到新元素上的事件
cufonize(true);//应用cufon
$(“#content”).find(“>div”).animate({'opacity':1},375);//fadein
});
}
}
});
$(窗口).bind('popstate',函数(e){
如果(!曾经推过){
返回;
}
phery.view(“#container”)。导航到(document.location.toString(),null,{'popstate':true});//后退和前进历史按钮
});
相同代码的较小版本为:

$(函数(){
var ever_push=false;
费里视野({
"容器":{
“afterHtml”:函数(html、数据、passdata){
/*好的浏览器可以获得历史API*/
if(passdata的类型['popstate']=='undefined'){
window.history.pushState(data,data.title,data.url);
曾经推动=真;
}
}
}
});
$(窗口).bind('popstate',函数(e){
如果(!曾经推过){
返回;
}
phery.view(“#container”)。导航到(document.location.toString(),null,{'popstate':true});//后退和前进历史按钮
});
});
在PHP方面,它将是:

function render_view($data、$params、$phery){
return PheryResponse::factory()->渲染视图(视图、获取视图(“所有项目”)->执行显示(“块”、数组());
}
//...
公共函数呈现($reset=FALSE){
Phery::instance()->视图(数组(
“#容器”=>数组($this“render_view”)
))->过程();
}
//...

使用pjax,它易于实现,并且对SEO友好。对于不受支持的浏览器,主要是IE 10以下的浏览器,它只是回到默认的浏览器行为(您没有任何工作)

我已经在少数几个项目上成功地使用了pjax,并计划在更多项目上使用它

您可以找到关于pjax的更多信息


既然您提到了使用Drupal,您可能会觉得很有帮助。

pjax不使用散列回退(这在我看来很好),所以如果您需要这些回退,您可以将pjax规则化,为什么这样好?这样就可以实现相同的功能。它不排除pjax,但它要求我考虑我的网站在不受支持的浏览器中的其他行为。也许pjax中应该为我想要的行为提供一个选项?是的,有-在不支持历史的情况下正常加载链接如果重新加载对网站的行为有很大影响怎么办?这应该是一个选项…当链接到您自己的产品/项目时,您必须披露。这是一个很好的工具。但是,另一个答案中建议的DrupalAjax框架非常强大。我认为让您的脚本使用Drupal比使用它自己的框架更难。事实上,它可以适应任何框架,而无需做很多工作。javascript部分可以简化。我看了一下AJAX框架,看起来非常突兀和复杂。。。好吧,这取决于你;)