帮助使用Mootools和JSONP

时间:2011-05-13 14:38:26

标签: mootools jsonp

我正在努力让它发挥作用。我需要的只是控制日志返回的对象。我在日志中看不到任何内容,尽管脚本标记被注入头部。

JSON:

jsonFeed({
    "results":{
        "loggedin": "No",
        "username": "",
        "company": ""
    }
});

JS:

function jsonFeed() {

}

window.addEvent('domready', function() {

    new Request.JSONP({
        url: <correcturl>,
        onComplete: function(data){
            console.log(data); // Nothing returned

        }
    }).send();

});

非常感谢任何帮助。

更新

我已删除了顶部的jsonFeed函数,并将现有代码更改为:

new Request.JSONP({
    log: true,
    url: loginstatus,
    callbackKey: 'jsonFeed',
    onComplete: function(data){
        console.log(data); // Nothing returned

    }
}).send();

在日志中我得到:

JSONP retrieving script with url:http://thedomain/LoggedStatus.aspx?jsonFeed=Request.JSONP.request_map.request_0
jsonFeed is not defined

在此注入:

<script type="text/javascript" async="true" src="http://thedomain/LoggedStatus.aspx?jsonFeed=Request.JSONP.request_map.request_0"> 

-- if I expand this I see the JSON --


</script>

所以a)我得到jsonFeed未定义的错误,b)onSuccess没有触发:(

我非常感谢所有帮助人员。如果我错过了这一点,我很抱歉:(

更新

补充道:

this.jsonFeed = function(data) {
    console.log(data);
};

..它的确有效。谢谢@Dimitar

我仍然不太了解它,但现在它在工作时有用。

2 个答案:

答案 0 :(得分:2)

它不起作用,因为你的回调函数名称忽略了Request.JSONP发送的函数名称,而是返回jsonFeed。

http://mootools.net/docs/more/Request/Request.JSONP

callbackKey (字符串:默认为回调)服务器用于包装JSON结果的url中的键。因此,例如,如果您使用callbackKey:'callback',那么服务器期望像http://..../?q=search+term&callback=myFunction;必须正确定义。

这是我编写的一个示例类,它可以从flickr中获取内容 - 使用自定义回调键 - 这很好。 http://fragged.org/mootools-flickr-api-class-via-request-jsonp_1042.html(p.s. jsfiddle可能会很慢,星期五,第13件事!)

另一件事是,如果远程端继续不与您合作并拒绝以正确包装的格式发送数据,例如:

Request.JSONP.request_map.request_0({data})

然后你需要确实

this.jsonFeed = function(data) {
    console.log(data);
};

这是全局对象(例如,窗口) - 你不能将其范围限定,所以要小心定义函数的位置。

如果执行后者,jsonFeed将扮演回调oncomplete函数的角色。

另一种方法是执行此操作,它将映射由类定义的本机回调函数并将其导出到远程主机喜欢的函数:

onRequest: function() {
    var lastCallback;
    Object.each(Request.JSONP.request_map, function(el) {
        lastCallback = el;
    });
    window.jsonFlickrApi = lastCallback;
},
onComplete: function(data) {
...
}

答案 1 :(得分:0)

jsonFeed(
    return //or anything else that will make this piece of data recognizable on your page
    {
    "results":{
        "loggedin": "No",
        "username": "",
        "company": ""
    }
});




new Request.JSONP({
        url: <correcturl>,
        callbackKey: 'jsonFeed'
        onComplete: function(data){
            console.log(data); // Nothing returned

        }
    }).send();