【问题标题】:How to AJAX-ify a random button on Blogger?如何 AJAX 化 Blogger 上的随机按钮?
【发布时间】:2013-03-18 14:08:34
【问题描述】:

我正在使用脚本在我的博客 (https://github.com/swook/jquery-ajaxify-plugin) 上使用 AJAX,因此用户可以在浏览不同页面时通过音乐播放器收听音乐而不会中断。

除了随机按钮外,一切正常。我想对随机按钮进行 AJAX 化。

问题是当我点击链接时,页面会重新加载。

您可以在这里查看不同的问题:http://www.julienlussiez.com/p/test_20.html(有 3 个随机按钮,不同的脚本)

测试#1:我有这个[我在这段代码上尝试了很多东西,但似乎没有任何效果]:

     <div id="myLuckyPost"><a href="#random" onclick="feelingLucky();return false;" title="Aléatoire">Aléatoire</a></div>
<div id='head'></div>

<script type='text/javascript'>
//<![CDATA[
function showLucky(root){
    var feed = root.feed;
    var entries = feed.entry || [];
    var entry = feed.entry[0];
      for (var j = 0; j < entry.link.length; ++j) {
       if (entry.link[j].rel == "alternate") {
       window.location = entry.link[j].href;
       }
      }
   }

function fetchLuck(luck){
    script = document.createElement('script');
    script.src = '/feeds/posts/summary?start-index='+luck+'&max-results=1&alt=json-in-script&callback=showLucky';
    script.type = 'text/javascript';
    document.getElementsByTagName('head')[0].appendChild(script);
   }
function readLucky(root){
    var feed = root.feed;
    var total = parseInt(feed.openSearch$totalResults.$t,10);
    var luckyNumber = Math.floor(Math.random()*total);
    luckyNumber++;
    fetchLuck(luckyNumber);
    }

function feelingLucky(e){
    var script = document.createElement('script'); 
    script.type = 'text/javascript';
    script.src = '/feeds/posts/summary?max-results=0&alt=json-in-script&callback=readLucky';
    document.getElementsByTagName('head')[0].appendChild(script);
    if(e && e.stopPropagation) {
        e.stopPropagation();
    } else {
        e = window.event;
        e.cancelBubble = true;
    }

    return false;
}
//]]>
</script>

测试#2:使用其他脚本随机化文章。问题还是一样。

<script>
<!--
/*
Random link button- By JavaScript Kit (http://javascriptkit.com)
Over 300+ free scripts!
This credit MUST stay intact for use
*/

//specify random links below. You can have as many as you want

var randomlinks=new Array()

randomlinks[0]="http://www.julienlussiez.com/2013/01/le-repos-du-fou_21.html"
randomlinks[1]="http://www.julienlussiez.com/2012/11/dissonance-3.html"
randomlinks[2]="http://www.julienlussiez.com/2012/10/renaitre.html"
randomlinks[3]="http://www.julienlussiez.com/2013/01/defaillance.html"
randomlinks[4]="http://www.julienlussiez.com/2012/08/fragile-2012.html"

function randomlink(){
window.location=randomlinks[Math.floor(Math.random()*randomlinks.length)]
}

//-->
</script>
<form>
<p><input type="button" name="B1" value="Aléatoire" onclick="randomlink(); return false;" /></p> </form>

测试#3:使用其他脚本随机化文章。问题还是一样。

<script>
/* Simple Random Posts function for Blogger
 * Copyright 2012 Yu-Jie Lin
 * Licensed under the MIT License
 */
function blogger_random_post(){
  // You can replace the value with your blog ID
  var blogID = $('#blogID').val();
  // for example:
  //  blogID = "4586487713356156869";
  var BLOGGER_POSTS_API = "http://www.julienlussiez.com/feeds/posts/summary";
  // appending necessary parameters
  BLOGGER_POSTS_API += "?alt=json-in-script&max-results=1&callback=?";
  // replacing blogID with value
  BLOGGER_POSTS_API = BLOGGER_POSTS_API.replace('blogID', blogID.toString());
  $('#btn-blogger-random').text('Tossing dice...');
  // retrieving posts count
  $.getJSON(BLOGGER_POSTS_API, function(data){
    var posts_count = parseInt(data.feed.openSearch$totalResults.$t);
    // index is 1-based
    var index = Math.floor(Math.random() * posts_count) + 1;
    // retrieving post link
    $.getJSON(BLOGGER_POSTS_API + '&start-index=' + index, function(data){
      $.each(data.feed.entry[0].link, function(idx, link){
        if (link.rel == 'alternate')
          // redirecting
          document.location.href = link.href;
      });
    });
  });
}
$(function(){
  $('#btn-blogger-random').click(blogger_random_post);
});
</script>
<label>Blog ID <input id="blogID" value="4586487713356156869"/></label>
<button id="btn-blogger-random">I'm Feeling Lucky &raquo;</button>  

谢谢!如果你有一些线索,那就太好了!

【问题讨论】:

  • 现在,你有两个feelingLucky函数!第二个会覆盖第一个!
  • 好的,我刚刚编辑了代码。现在,我又回到了起点。我不知道我必须改变什么才能停止刷新。
  • 如果你评论document.location.href = link.href;的处理,是不是还耳目一新?在你的新blogger_random_post 中,我看不到你在哪里添加了一些东西到 DOM 中!你能告诉我一个 Json 示例,说明 post link 是什么?
  • 可以在文章底部查看。页面仍在刷新。

标签: ajax button random blogger


【解决方案1】:

你必须stopPropagation

为此,您可以在函数末尾添加return false;

How to stop propagation

如果不行,可以加

// event is the Event object
if (event.preventDefault) {
  event.preventDefault();
}
event.returnValue = false;

Alsacreation (in french ^^)

event 是一个必须传递给调用者的对象...

<div id="myLuckyPost"><a href="#random" onclick="feelingLucky(event)" title="">BD Aléatoire</a></div>

function feelingLucky(event){
  //now you can use event.stopPropagation...

}

您也可以使用window.event 检索此对象,但它不是跨浏览器!见Other topic on Javascript Event object

【讨论】:

  • 它不起作用。随机按钮不断刷新页面。不管怎么说,还是要谢谢你!我要再试一次……可能我的代码写的不对。
  • 可能在&lt;div id="myLuckyPost"&gt;&lt;a href=" 中使用javascript:void(0)javascript:void('something') 而不是#random
  • 不...它不起作用。我刚刚编辑了我的帖子以显示代码。也许有问题。再次感谢!
  • 您的代码也可以在 Blogger 上运行,但是当我单击随机按钮时,我只有“Somethink will be added”。我应该在代码中更改什么?
  • 只需将 Fiddle 的 feelLucky 功能替换为您的即可。
【解决方案2】:

只需将现有的feelingLucky 函数更改为

function feelingLucky(e){
    var script = document.createElement('script'); 
    script.type = 'text/javascript';
    script.src = '/feeds/posts/summary?max-results=0&alt=json-in-script&callback=readLucky';
    document.getElementsByTagName('head')[0].appendChild(script);
    if(e && e.stopPropagation) {
        e.stopPropagation();
    } else {
        e = window.event;
        e.cancelBubble = true;
    }

    return false;
}

如果它不起作用,你的问题出在 '/feeds/posts/summary?max-results=0&amp;alt=json-in-script&amp;callback=readLucky' 页面或 ajaxify.js 中

想法

您可以尝试将您的&lt;a&gt; 更改为另一个元素,例如&lt;span&gt;

【讨论】:

  • 好的!谢谢。我试过了,但还是不行。是的,问题可能出在 '/feeds/posts/summary?max-results=0&alt=json-in-script&callback=readLucky' 页面或 ajaxify.js 中。
  • 我正在尝试其他脚本(编辑)。我有同样的问题,但也许有一个解决方案。我不知道要修改什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 2019-05-09
  • 2021-01-30
相关资源
最近更新 更多