将数据发布到外部js脚本并提醒他们

时间:2010-08-22 15:37:57

标签: javascript jquery

我正在使用此代码加载数据并将数据传递给js文件

jQuery.ajax({
    async: true,
    type: "GET", 
    url: "js/test.js", 
    data:({data : result}),
    success: function() {}, 
    dataType: 'script' });

并且在test.js中我有这个

alert(result);

但警报不起作用,它不会抛出任何错误... test.js文件无法识别传递的参数... 我知道这很容易,如果我有一个PHP文件但是js呢?

我正在使用firebug,结果变量已定义.. 让我说我传递一个字符串“hello”作为参数

data:{data : 'hello'},

firebug显示:http://localhost/js/test.js?data=hello

但test.js中的alert(data);仍无法正常工作

一般问题是:如何读取js文件中传递的参数?

4 个答案:

答案 0 :(得分:0)

您确定在调用此函数时,result变量是否已实际定义?尝试这样看看它是否有效。另外,请确保在警告时test.js中也定义了此变量:

jQuery.ajax({
    type: 'GET', 
    url: 'js/test.js', 
    data: { data : 'result' },
    dataType: 'script' 
});

您还可以查看.getScript()功能

答案 1 :(得分:0)

只是做:

result = something;

jQuery.ajax({
    async: true,
    type: "GET", 
    url: "js/test.js", 
    success: function() {}, 
    dataType: 'script' });

数据参数将序列化为查询字符串,这不是您想要的。

如果需要,可以将变量放在命名空间中。另一种方法是让外部JavaScript文件定义一个然后调用的函数。

答案 2 :(得分:0)

正如马修所说,没有真正干净的方式。这是我能找到的最好的:

  jQuery.ajax({
  async: true,
  type: "GET", 
  url: "js/test.js", 
  context: result, 
  success: function(data) { (new Function("result", data))(this.context);   },
  dataType: 'text' });

这里发生的事情是我们将脚本作为文本,并将其评估为带有参数“result”的函数。效果是具有如下功能:

function(result) { /* contents of js/test.js */ }

通过传递this.context中的值来调用它。

答案 3 :(得分:0)

script.aculo.us有一个类似于此的模块加载器。它依赖于插入头部最后位置的脚本。然后该脚本读取最后一个脚本(本身)的SRC并解析'?'之后的所有内容。

这种方法的缺点是浏览器在文件下载和解析时锁定(AKA,而不是异步)。如果你能够通过服务器端语言(PHP,Perl等)解析JS文件,那么你会好得多。

作为旁注。大多数apache配置不允许你“POST”到js文件。它会返回一个奇怪的错误(501我认为?),所以要小心。