我正在使用此代码加载数据并将数据传递给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文件中传递的参数?
答案 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我认为?),所以要小心。