首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有定义和生成回调的JQuery JSONP请求

具有定义和生成回调的JQuery JSONP请求
EN

Stack Overflow用户
提问于 2014-12-03 07:42:34
回答 1查看 820关注 0票数 0

我有一个测试JSONP服务器,它在发出HTTP请求时返回一个JSONP对象。它可以返回标准的JSONP函数或回调变量中请求的函数。例如。

http://my.host:8024

JSONP_CALLBACK( {“msg”:“这是丹尼斯的生日!在咖啡角为每个人准备蛋糕!(当它持续时间;- ) "},{”msg“:”域OBIEE_1中的一些客户可能会因为网络延迟而出现性能下降,请联系保罗了解详细信息“},{"msg":"Weblogic域WL_ENG_1将因22:00到00:00之间的维护而下降”};

http://my.host:8024/?callback=demo

代码语言:javascript
复制
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脚本是;

代码语言:javascript
复制
<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请求类似于39430030203。因此,指定的回调函数和生成的回调函数可能都在JSONP请求中。

当(基于其他示例)更改"var url= "http://my.host:8024/?callback=?“”改为"var url=“http://my.host:8024/?callback= ;”HTTP请求更改为"http://my.host:8024/?callback=&callback=msgsJsonCallback&“时。或者当将url更改为"var url=“http://my.host:8024/时,请求url变成"http://my.host:8024/?callback=msgsJsonCallback&_=39430030203=39430030203”。

任何关于如何解决这个问题的帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-03 08:04:22

_=someRandomNumber位是作为解决方案添加的,以确保ajax请求接收新的数据,而不是访问浏览器缓存。

如果要删除此选项,请添加cache: true选项:

代码语言:javascript
复制
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
 });

}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27266199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档