为毛Javascript的replace支持回调函数啊,以及关于ajax返回值和feelyblog更新了

好吧。。这么长的标题我都不知道会怎么显示。

为毛Javascript的replace支持回调函数啊!!!!

害得我多费了好多时间。。。。


好吧,正文开始。

一切要从我今天突然脑洞大开想把bilibili的播放器引用到自己博客来说起。

以下是最后完成的引用代码:在文章中任何一个地方出现这个代码都可以。不过因为bilibili播放器比较长。所以还是放到一个新段落里比较好。

1
[video][[bilibiliav896743p1]][/video]

以下为av896743【玄觞、王朝——空待】

av896743p1

(↑↑2014年2月2日更新——原来演示视频被up主自己删除了。。于是我只能换一个↑↑)


网页上这部分,我用正则表达式去匹配。找到[video][/video]标签括起来的部分,然后找出里面的av号和分p号。替换成播放器。完成。嗯,就是这样一个过程。

然后播放器是只接受cid的,不是分p号。于是我去注册了一个api。。。。。为了方便的获取cid。为了节省HTML模板的代码,我在php这里就渲染成最后的HTML代码。显示模板那边只要引用就可以了。

嗯,这个api如下:

http://www.namido.net/search/biliapi/avid/[av号]/page/[分p号]

比如av894517的p1就可以直接去请求http://www.namido.net/search/biliapi/avid/894517/page/1

然后我在怎么把请求结果显示回页面上时遇到了问题。请求这东西是要用ajax的啊。。。。。。。

然后突然发现。。replace居然可以用回调函数。。。。

于是我非常简单的把最后的代码写成了这个样纸:

1
2
3
contentHtml=contentHtml.replace(/([video][[bilibiliav)(.+?)(*)(.+?)(]][/video])/g,function($0,$1,$2,$3,$4,$5){ 
return ($.ajax({url:"http://www.namido.net/search/biliapi/avid/"+$2+"/page/"+$4,async:false})).responseText;
});

就在写这一段代码的时候,我才发现,原来ajax异步读取是不能返回的。

嗯,知道了这个结论就容易想通原因了,不知道什么时候读取完嘛。所以才要回调函数这种东西。

于是就像我上面写的那样。最后换了$.ajax方法。把异步关掉,这才有了返回值这种东西。


以上这些已经更新到了新的Feelyblog r22中。

(5月2日更新——现在这些也已经在这个Wordpress博客中了,不过我比较懒,都是靠主题实现的,而没有单独做成插件)


2015年10月21日更新

新程序这些还没适配。。。