我有一个测试JSONP服务器,它在发出HTTP GET请求时返回一个JSONP对象。它可以返回标准JSONP函数或回调变量中请求的函数。 E.g。
JSONP_CALLBACK([ {" msg":"这是丹尼斯的生日!咖啡角的蛋糕!! (虽然它持续;-))"}, {" msg":"域OBIEE_1中的某些客户可能会因网络延迟而导致性能下降,请联系Paul以获取详细信息"}, {" msg":" Weblogic域WL_ENG_1将因22:00至00:00之间的维护而停止运行"} ]);
http://my.host:8024/?callback=demo
demo([
{"msg":"It is Dennis birthday! Cakes for everone at the coffee corner !!!! ( while it lasts ;-) )"},
{"msg":"Some customers in domain OBIEE_1 may experience performance degradation due to network latency, contact Paul for details"},
{"msg":"Weblogic domain WL_ENG_1 will go down due to maintenance between 22:00 and 00:00"}
]);
此示例用于测试AngularJS $ http JSONP方法,并且可以正常用于测试这些脚本。现在我正在尝试开发一个简短的jQuery脚本,检索这个演示服务器的相同JSON数据。 jQuery脚本是;
<script type="text/javascript" charset="utf-8">
var htmlData = "<ul><li>Ticker was not successfully initialized</li></ul>" ;
// callback function for JSONP ajax request
function msgsJsonCallback(jsonData) {
htmlData = "<ul>" ;
// get all msg values from JSON data
// JSON format ([{"msg":"message 1"{,{"msg":"message 2},......])
$.each(jsonData, function() {
htmlData += "<li>" + this['msg'] + "</li>" ;
}) ;
httmlData = htmlData + "</ul>" ;
$('#tickerMessage').vTicker('stop');
$('#tickerMessage ul').replaceWith(htmlData);
$('#tickerMessage').vTicker('init',{speed: 1500, pause: 10000});
}
function RefreshMessages() {
var url= "http://my.host:8024/?callback=?" ;
$.ajax({
type: 'GET',
url: url,
jsonpCallback: 'msgsJsonCallback',
dataType: 'jsonp',
timeout: 5000,
success: function(json) {
console.log("Success") ;
console.dir(json) ;
},
complete: function(jqXHR, textStatus){
console.log("COMPLETE: " + textStatus) ;
}
});
// schedule next refresh
setTimeout(function() {
RefreshMessages();
}, 60000);
}
// initialize message ticker on document-ready
$(document).ready(function() {
RefreshMessages();
}) ;
</script>
预期的HTTP请求为http://my.host:8024/?callback=msgsJsonCallback,但生成的http请求与http://my.host:8024/?callback=msgsJsonCallback&_39430030203类似。因此,可能指定的回调函数和生成的回调函数都在JSONP请求中。
何时(基于其他示例)更改&#34; var url =&#34; http://my.host:8024/?callback=?&#34; ;&#34;到&#34; var url =&#34; http://my.host:8024/?callback=&#34; ;&#34; HTTP请求更改为&#34; http://my.host:8024/?callback=&callback=msgsJsonCallback&39430030203 &#34;。或者将网址更改为&#34; var url =&#34; http://my.host:8024&#34;请求网址变为&#34; http://my.host:8024/?callback=msgsJsonCallback& =39430030203&#34;。
有关如何解决此问题的任何帮助表示赞赏!
答案 0 :(得分:1)
正在添加_=someRandomNumber
位作为解决方法,以确保ajax请求接收新数据而不是访问浏览器缓存。
如果要删除此内容,请添加cache: true
选项:
function RefreshMessages() {
var url= "http://my.host:8024" ;
$.ajax({
type: 'GET',
url: url,
jsonpCallback: 'msgsJsonCallback',
dataType: 'jsonp',
timeout: 5000,
success: function(json) {
console.log("Success") ;
console.dir(json) ;
},
complete: function(jqXHR, textStatus){
console.log("COMPLETE: " + textStatus) ;
},
cache: true
});
}