在URL中定义并生成回调的JQuery JSONP请求
我有一个测试JSONP服务器,它在发出HTTP GET请求时返回一个JSONP对象。它可以返回标准JSONP函数或回调变量中请求的函数。例如 JSONP_回调([ {“msg”:“今天是丹尼斯的生日!在咖啡角为每个人准备蛋糕!!!!(当它持续;-)”, {“msg”:“域OBIEE_1中的某些客户可能会由于网络延迟而出现性能下降,请联系Paul以了解详细信息”}, {“msg”:“Weblogic域WL_ENG_1将在22:00和00:00之间因维护而关闭”} ]); 这个示例用于测试AngularJS$HTTPJSONP方法,并且可以很好地测试这些脚本。现在,我正试图开发一个简短的jQuery脚本来检索与此演示服务器相同的JSON数据。jQuery脚本是在URL中定义并生成回调的JQuery JSONP请求,jquery,callback,jsonp,Jquery,Callback,Jsonp,我有一个测试JSONP服务器,它在发出HTTP GET请求时返回一个JSONP对象。它可以返回标准JSONP函数或回调变量中请求的函数。例如 JSONP_回调([ {“msg”:“今天是丹尼斯的生日!在咖啡角为每个人准备蛋糕!!!!(当它持续;-)”, {“msg”:“域OBIEE_1中的某些客户可能会由于网络延迟而出现性能下降,请联系Paul以了解详细信息”}, {“msg”:“Weblogic域WL_ENG_1将在22:00和00:00之间因维护而关闭”} ]); 这个示例用于测试Ang
<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>
var htmlData=“- 股票代码未成功初始化”
”;
//JSONP ajax请求的回调函数
函数msgsJsonCallback(jsonData){
htmlData=“”;
//从JSON数据获取所有msg值
//JSON格式([{“msg”:“消息1”{,{“msg”:“消息2},…]))
$.each(jsonData,function(){
htmlData+=“- ”+此['msg']+“
”;
}) ;
httmlData=htmlData+“
”;
$('tickerMessage').vTicker('stop');
$('#tickerMessage ul')。替换为(htmlData);
$(#tickerMessage').vTicker('init',{speed:1500,pause:10000});
}
函数刷新消息(){
变量url=”http://my.host:8024/?callback=?" ;
$.ajax({
键入:“GET”,
url:url,
jsonpCallback:'msgsJsonCallback',
数据类型:“jsonp”,
超时:5000,
成功:函数(json){
控制台日志(“成功”);
console.dir(json);
},
完成:函数(jqXHR,textStatus){
console.log(“完成:+textStatus”);
}
});
//安排下次刷新
setTimeout(函数(){
刷新消息();
}, 60000);
}
//在文档准备就绪时初始化消息标记器
$(文档).ready(函数(){
刷新消息();
}) ;
预期的HTTP请求为,但生成的HTTP请求类似。因此,指定的回调函数和生成的回调函数可能都在JSONP请求中
当(基于其他示例)将“var url=?”;“更改为”var url=”;“HTTP请求更改为“”。或将url更改为“var url=”时,请求url变为“”
非常感谢您提供有关如何解决此问题的任何帮助!正在添加
\uu=someRandomNumber
位,作为一种解决方法,以确保ajax请求接收新数据,而不是命中浏览器缓存
如果要删除此选项,请添加缓存: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
});
}感谢您对_randomNumber的解释。这使我正确理解了如何在我编写的bash Web服务器上解决这个问题。脚本只需要一个url变量,因此将“?callback=callbackname&_randomNumber”解释为一个url变量。如果可以的话,请启用并删除jsonp()
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
});