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

时间:2014-08-14 11:38:20

标签: javascript jquery

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

我有一个控制器返回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()来启动调用。

我的问题是:对象分配有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

你有一些选择:

  1. 使用$.getScript()动态包含脚本。但是你必须稍微更改脚本中的代码,因为当jQuery评估文件时返回值将丢失。 F.E.将代码更改为:

    function getFormData() { return { name: "bla", validation: function() { alert('juhu'); } }; }

    然后在$.getScript回调中,只需致电var data = getFormData();

  2. 使用$.ajax()并将dataType设置为JSONP,以便jQuery负责加载脚本并执行函数。

    $.ajax({ url: 'dynamicform.js', dataType: 'jsonp', jsonp: false, jsonpCallback: 'getFormData', success: function(result){ // do something with the result :) } });

答案 1 :(得分:0)

验证功能不需要在您的表单中编写,您可以使用API​​来构建它们,这些API只是字段的id或类来验证内容(如jQuery Validation插件)