将文件名传递给我的javascript文件

时间:2013-11-05 19:47:00

标签: javascript php ajax wordpress

我需要从我的wordpress插件传递一个文件名和位置(send_message.php)到一个javascript文件,这样我就可以在我的js中使用带有ajax的send_message.php。

现在我想的第一件事就是在隐藏的div中回显名称或将其设置为某个标记的属性,然后用js读出该值。但这似乎不太好。

在IRC中,他们告诉我回复一个<script type='application/javascript'> var filename = <?php echo plugins_url(...) ?>,但这不起作用,因为我也无法访问该变量,并形成我的感觉,这也不是很好的练习。

另一个想法是使用header('Content-Type: text/javascript')生成* .php文件,然后使用var filename = <?php...设置变量。这似乎是一个很好的方式(如果使用PHP文件,因为javascript是好的?:P)。但它不起作用,因为wordpress告诉我,当我以某种方式从该文件中调用plugins_url()时没有定义它?

这是一个好方法还是可能更好? (如果这是一个好方法,我如何在我的iAmJS.php文件中使用plugins_url)

2 个答案:

答案 0 :(得分:0)

var filename = <?php echo plugins_url(...) ?>

这不起作用,因为plugins_url可能包含一个字符串。在它周围添加引号,以便JavaScript将其视为字符串:

var filename = '<?php echo plugins_url(...) ?>';

答案 1 :(得分:0)

你可以从外部文件中用JS嗅探它:

(function(){ // script filename setter, leaves window.__filename set with active script URL.
if(self.attachEvent){
 function fn(e,u){self.__filename=u;}
 attachEvent("onerror",fn);
 setTimeout(function(){detachEvent("onerror", fn)},20);
 eval("gehjkrgh3489c()");
}else{
 Object.defineProperty( window, "__filename", { configurable: true, get:function __filename(){
   try{document.s0m3741ng()}catch(y){
    return "http://" + 
     String(y.fileName || y.file || y.stack || y + '')
     .split(/:\d+:\d+/)[0].split("http://")[1];
    } 
 }})//end __filename
}//end if old IE?
}());


//demo:
alert(__filename);
我承认有点难看,但即使在IE中它也有效......

如果你不关心IE,它可以更短:

Object.defineProperty( window, "__filename", { configurable: true, get:function __filename(){
   try{document.s0m3741ng()}catch(y){
    return "http://" + 
     String(y.fileName || y.file || y.stack || y + '')
     .split(/:\d+:\d+/)[0].split("http://")[1];
    } 
}})//end __filename