Javascript 将脚本$.get()的函数结果赋给任意变量
不确定标题是否准确,不确定如何更好地表达 我有一个返回text/javascript的控制器,用于动态构建表单。不幸的是,返回JSON是不够的,因为我还需要包含验证函数 我返回的内容的一个示例:Javascript 将脚本$.get()的函数结果赋给任意变量,javascript,jquery,Javascript,Jquery,不确定标题是否准确,不确定如何更好地表达 我有一个返回text/javascript的控制器,用于动态构建表单。不幸的是,返回JSON是不够的,因为我还需要包含验证函数 我返回的内容的一个示例: (function () { return { name: "bla", validation: function() { alert('juhu'); } }; }()); 它被包裹在里面;因此它在客户端ge
(function () {
return {
name: "bla",
validation: function() {
alert('juhu');
}
};
}());
它被包裹在里面;因此它在客户端get上正确解析。该函数返回一个对象,因为我希望在客户端将其分配给我需要的任何对象,而不是在返回的数据中分配给(比如window.foo)并在客户端以这种方式处理它。
我可以用下面的方法让它工作
$.get('/api/formdata', function (data, textStatus, jqxhr) {
var foo = eval(data);
foo.validation();
console.log('GET OK', textStatus, jqxhr, data, foo.name);
}).fail(function (data, textStatus, jqxhr) {
console.log('GET failed', textStatus, jqxhr, data);
});
因为返回的数据被视为字符串,所以我需要使用eval来启动调用
我的问题是:有没有更好的对象分配方法?您有一些选择:
用于动态包含脚本。但是您必须稍微更改脚本中的代码,因为当jQuery对文件求值时,返回值将丢失。F.e.将代码更改为:
函数getFormData{
返回{
姓名:bla,,
验证:函数{
警惕‘巨虎’;
}
};
}
然后在$.getScript回调中,只需调用var data=getFormData
将数据类型设置为JSONP时使用,以便jQuery负责加载脚本和执行函数
$.ajax{
url:'dynamicform.js',
数据类型:“jsonp”,
jsonp:false,
jsonpCallback:'getFormData',
成功:结果{
//对结果做点什么:
}
};
验证函数不需要在表单中编写,您可以使用只会验证字段id或类的API来构建它们,以验证内容,如jQuery验证插件,除了正确设置accept标头之外,使用$.getScript还有什么好处。我仍然需要评估结果。如果不需要,脚本将在加载后执行。尝试添加console.logexecuted;检查源代码,$.getScript使用脚本参数调用$.get,后者将在下载的脚本上调用$.globalEval。请看,第一个选项似乎更可取,但我是否可以不使用匿名函数?我知道这是吹毛求疵,但我想避免不必要的惯例。这是一个租户类型的系统,所以我希望尽可能避免很多容易出错的错误。然后我想你需要像你的问题中那样使用eval方法:你可能想用实际的JS文本而不是JSON来尝试JSONP