在我的.js
文件的根目录中,我声明:
var Doe = {
"foo": "The quick brown fox jumps over the lazy dog.",
"bar": "ABCDEFG",
"baz": [52, 97],
"testfunc": function(){alert('json function');}
}
在我的HTML中:
<a id="lele" href="javascript:void(0)" onclick="Doe.testfunc()">Doe</a>
当我单击它时,它可以工作,所以我知道可以将函数放在JSON对象中。
现在,在我声明的.js
的根目录中:
$.getJSON("~/rule/2", function(data) {
alert("2: " + data.foo);
data.testfunc();
});
服务器正在返回该URL:
context.Response.ContentType = "application/json";
context.Response.Output.Write(@"{
""foo"": ""The quick brown fox jumps over the lazy dog."",
""bar"": ""ABCDEFG"",
""baz"": [52, 97],
""testfunc"": function(){alert('json function');}
}");
context.Response.Flush();
但没有任何反应:(显然是因为如果有错误,.getJSON将无声地失败。但是,如果我删除有关该功能的行:
$.getJSON("~/rule/2", function(data) {
alert("2: " + data.foo);
});
和
context.Response.Output.Write(@"{
""foo"": ""The quick brown fox jumps over the lazy dog."",
""bar"": ""ABCDEFG"",
""baz"": [52, 97]}");
然后它工作,弹出一个警告“foo”属性的内容。
该功能有什么问题? :(在我将一个函数放入JSON对象的那一刻,jQuery失败了。
亲切的问候。
答案 0 :(得分:6)
您没有JSON对象。
您有一个对象文字。函数不能是JSON字符串的值。
JSON只是对象文字语法的子集。可能的值有:
values http://json.org/value.gif
详细了解json.org
这是JavaScript对象:
var foo = {bar: 42}
这是一个JSON字符串:
var foo = '{"bar": 42}';
另见JavaScript, JSON objects and object literal notation。
更新:要返回并执行JavaScript,您可以执行以下操作:
您可以返回纯JavaScript,例如
context.Response.ContentType = "text/javascript";
context.Response.Output.Write(@"
function testfunc(){
alert('json function')
};
testfunc();
");
并将$.ajax
与dataType: 'script'
:
$.ajax({
url: "~/rule/2",
dataType: 'script',
success: function(data) {}
});
您还可以使用以下函数定义JavaScript对象:
context.Response.ContentType = "text/javascript";
context.Response.Output.Write(@"
var obj = {
bar: function(){alert(42);}
}
yourHandler(obj);
");
您只需要一个名为yourHandler
的全局函数(当然仍然使用ajax
调用dataType: script
)。
这可能是最接近你想要的东西。不同之处在于,您不返回JSON,而是返回JavaScript,并且您不处理success
回调中的对象,而是处理另一个函数,该函数必须从您发送的JS中调用。 / p>
查看另一个DEMO
答案 1 :(得分:4)
不可能将函数放在JSON对象中。可以将函数放在JavaScript对象中,这是您在第一个片段中演示的内容。
答案 2 :(得分:3)
您可以将函数体的字符串表示只放在您发送的JSON中,然后将该数据提供给Function
构造函数。
示例: http://jsfiddle.net/m8PQY/1/
var myJSON = '{"func":"{alert(\'json function\');}"}';
var obj = $.parseJSON( myJSON );
var myFunc = new Function( obj.func );
myFunc();
如果您是要发送的代码的作者,显然您只想这样做。