我在客户端上使用 JSONP 使用 WCF 服务从服务器获取数据,该服务可以使用 HTTP GET 返回结果(它获取一个“回调”参数,它是一个“函数名”并返回回调({data}),你知道。 ..JSONP)。
一切正常,但如果我在服务的一项操作上启用缓存(使用“AspNetCacheProfile”) - 那么出现问题了,我不确定是什么......
我获得 JSONP 的方式是使用我前段时间从 SO (http://stackoverflow.com/questions/2499567/how-to-make-a-json-call-to-一个网址)
function getJSONP(url, success) {
var ud = 'fc_' + + Math.floor(Math.random()*1000000),
script = document.createElement('script'),
head = document.getElementsByTagName('head')[0]
|| document.documentElement;
window[ud] = function(data) {
head.removeChild(script);
success && success(data);
};
script.src = url.replace('callback=?', 'callback=' + ud);
head.appendChild(script);
}
这会创建一个随机 id ('fc_xxxx'),然后将其分配为窗口对象内的一个函数,然后将其用作注入到文档中的动态 javascript 的 url 的“回调”参数,然后是“ud”函数运行,删除脚本并使用接收到的数据调用“成功”回调函数。
在服务的正常未缓存操作上使用它时,通常需要大约 200 毫秒才能获得响应,并且可以正常工作。
缓存的响应需要大约 10 毫秒 - 我收到一个错误,即“fc_XXXXX”函数未定义。
就好像响应对它来说“太快了”。
我也尝试使用jQuery.getJSON() - 而且,回调也没有触发。
在所有情况下,当我查看 Firebug 中的网络流量时 - 我可以看到 GET 请求,并且我可以看到正确的数据确实被返回了。
有谁知道我怎样才能让它与缓存的响应一起工作......?