2013-03-09 120 views
0

我正在为Wordpress中的自定义帖子类型工作一个AJAX过滤器。它工作得很好,但我有一件事我无法工作。我想从主体中的脚本标记中执行AJAX函数(或者如果工作更好,可以从body onload中执行),这样我可以告诉函数在加载页面时打开哪些过滤器。调用jQuery Ajax函数页面onload或脚本标记

这是函数加载AJAX

// ajaxLoop.js 
jQuery(function($){ 

var loading = true; 
var $window = $(window); 
var $content = $("body #filterAanbod"); 

// ajax inladen, afhankelijk van categorie, onderwijs type en kerndoel. 
function loadActiviteiten(cat, type, doel, populair){ 
      $.ajax({ 
       type  : "GET", 
       data  : {categorie : cat, type : type, kerndoel : doel, pop: populair}, 
       dataType : "html", 
       url  : "loopHandler.php", 
       beforeSend : function() { 
          $content.fadeOut(100); 
          $content.append(
          '<img src="images/ajax-loader.gif" />' 
         ); 

        } 
       }) 
       .done(function(data) { 
         $content.hide(); 
         $content.html(data); 
         $content.fadeIn(500, function() { 
           loading = false; 
            $("#temp_load").remove(); 
           }); 
         }) 
       .fail(function() { $("#temp_load").remove(); alert("failed miserably"); }); 


    } 

我用一个jQuery点击功能,为过滤器导航执行loadActiviteiten(cat, type, doel, populair)。而且,这工作得很好。但是,当我想在模板文件中执行它时,它不会执行任何操作。

这是我在做的template.php

<script type="text/javacsript"> 
$(function() { 
    loadActiviteiten(); 
}); 
</script> 

的想法是让一个自定义的元框,用户可以选择过滤器打开当前网页和转换为JavaScript函数前。 loadActiviteiten(term-slug,0,0,0);只是加载匹配分类'分类''term-slug'的帖子。

我真的不明白为什么它没有执行,任何人都可以帮助我吗?

oyi fyi,我在控制台中没有收到任何错误。

谢谢。

+0

您没有传递任何变量到页面后您的AJAX调用load - 你的函数需要cat,type,doel和populair被定义为用有意义的查询字符串进行AJAX调用,但是你的'loadActiveiten()'不会传递任何变量到调用中。 – Terry 2013-03-09 15:13:57

+0

这也不是问题。如果我不通过任何增值应用程序,它应该显示所有内容,并且在调用'ajaxloop.js'中的函数时工作正常。 – 2013-03-09 15:17:07

回答

0

我发现这样做的最简单的方法是在ajax调用中添加一个success: function(result) {}子句。另外,你应该用不同的方式来确保dom已经准备好进行操作。

$(document).ready(loadActiviteiten); 

而不是

$(function() { 
    loadActiviteiten(); 
}); 
+0

嗯。并不真正了解如何工作。我使用的是jquery 1.9.1,并且'succes:'子句不再被支持,这就是为什么我以新的方式做到这一点。如果我从'ajaxloop.js'调用'loadActiviteiten()',但是从'template.php'调用它不起作用,那么加载内容就可以正常工作。 – 2013-03-09 15:10:02

+1

你的两个代码示例都是等价的。 '$(function)'是'$(document).ready(function)'的别名 – 2013-03-09 15:11:46

1

你能做到这样:

步骤1:先加载jQuery库。

第2步:加载你ajaxLoop.js:

<script src="ajaxLoop.js"></script> 

ajaxLoop.js

function loadActiviteiten(cat, type, doel, populair){ 
var loading = true; 
var $window = $(window); 
var $content = $("body #filterAanbod"); 

// ajax inladen, afhankelijk van categorie, onderwijs type en kerndoel. 

      $.ajax({ 
       type  : "GET", 
       data  : {categorie : cat, type : type, kerndoel : doel, pop: populair}, 
       dataType : "html", 
       url  : "loopHandler.php", 
       beforeSend : function() { 
          $content.fadeOut(100); 
          $content.append(
          '<img src="images/ajax-loader.gif" />' 
         ); 

        } 
       }) 
       .done(function(data) { 
         $content.hide(); 
         $content.html(data); 
         $content.fadeIn(500, function() { 
           loading = false; 
            $("#temp_load").remove(); 
           }); 
         }) 
       .fail(function() { $("#temp_load").remove(); alert("failed miserably"); }); 


    } 

第三步:

现在你的功能可按是一个全球性的功能。

所以,你可以这样调用:

<script type="text/javascript"> 
jQuery(document).ready(function($){ 

    loadActiviteiten(cat, type, doel, populair); 
}); 
</script> 

只要确保你的函数被调用加载后您的ajaxLoop.js文件

相关问题