Javascript 将脚本$.get()的函数结果赋给任意变量

Javascript 将脚本$.get()的函数结果赋给任意变量,javascript,jquery,Javascript,Jquery,不确定标题是否准确,不确定如何更好地表达 我有一个返回text/javascript的控制器,用于动态构建表单。不幸的是,返回JSON是不够的,因为我还需要包含验证函数 我返回的内容的一个示例: (function () { return { name: "bla", validation: function() { alert('juhu'); } }; }()); 它被包裹在里面;因此它在客户端ge

不确定标题是否准确,不确定如何更好地表达

我有一个返回text/javascript的控制器,用于动态构建表单。不幸的是,返回JSON是不够的,因为我还需要包含验证函数

我返回的内容的一个示例:

(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