不确定标题是否准确,不确定如何更好地表达。
我有一个控制器返回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()
来启动调用。
我的问题是:对象分配有更好的方法吗?
答案 0 :(得分:0)
你有一些选择:
使用$.getScript()
动态包含脚本。但是你必须稍微更改脚本中的代码,因为当jQuery评估文件时返回值将丢失。 F.E.将代码更改为:
function getFormData() {
return {
name: "bla",
validation: function() {
alert('juhu');
}
};
}
然后在$.getScript
回调中,只需致电var data = getFormData();
使用$.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插件)