Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSONP从WCF服务获取缓存响应时出现问题_Javascript_Jquery_Wcf_Caching_Jsonp - Fatal编程技术网

Javascript JSONP从WCF服务获取缓存响应时出现问题

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

我在客户机上使用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毫秒才能返回响应,并且工作正常
缓存的响应大约需要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);
}