Javascript JSONP从WCF服务获取缓存响应时出现问题
我在客户机上使用JSONP从使用WCF服务的服务器获取数据,该服务可以使用HTTP get返回结果(它获取一个“callback”参数,它是一个“function name”,并返回回调({data}),您知道……JSONP) 一切都正常,但如果我在服务的一个操作上启用缓存(使用“AspNetCacheProfile”),那么就有问题了,我不确定是什么 我获取JSONP的方法是使用一个函数,这个函数是我不久前从这里的一个问题中获得的(http://stackoverflow.com/questions/2499567/how-to-make-a-json-call-to-a-url) 这将创建一个随机id('fc_xxxx'),然后将其分配为窗口对象内的函数,然后将其用作注入文档的动态javascript url的“回调”参数,然后运行“ud”函数,删除脚本并使用接收到的数据调用“success”回调函数 在服务的正常未缓存操作中使用它时,通常需要大约200毫秒才能返回响应,并且工作正常Javascript JSONP从WCF服务获取缓存响应时出现问题,javascript,jquery,wcf,caching,jsonp,Javascript,Jquery,Wcf,Caching,Jsonp,我在客户机上使用JSONP从使用WCF服务的服务器获取数据,该服务可以使用HTTP get返回结果(它获取一个“callback”参数,它是一个“function name”,并返回回调({data}),您知道……JSONP) 一切都正常,但如果我在服务的一个操作上启用缓存(使用“AspNetCacheProfile”),那么就有问题了,我不确定是什么 我获取JSONP的方法是使用一个函数,这个函数是我不久前从这里的一个问题中获得的(http://stackoverflow.com/questi
缓存的响应大约需要10毫秒- 我得到一个错误,“fc_uxxxxx”函数未定义 这就好像反应“太快”了 我还尝试使用jQuery.getJSON()——并且,回调也不会触发
在所有情况下,当我查看Firebug中的网络流量时,我可以看到GET请求,我可以看到正确的数据实际上得到了返回
有人知道我如何才能使它与缓存的响应一起正常工作吗?我知道了!响应函数的名称在每次调用中都不同(在我的手动jsonp实现和jQuery实现中)
函数名是服务器响应的一部分(这是jsonp工作原理的一部分…)。 因此,如果响应是一个缓存响应,它将实际返回函数的旧名称(在客户端上下文中不再存在)
因此,在本例中,我只需要为回调函数提供一个常量名称,它应该可以使用。:) 我觉得还可以。您是否绝对确定服务器在缓存时返回正确的响应?你能发布一些蜻蜓/萤火虫/任何你使用的东西的输出吗?
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);
}