Помогите с помощью Mootools и JSONP - PullRequest
1 голос
/ 13 мая 2011

Мне очень тяжело пытаться заставить это работать.Все, что мне нужно, - это сохранить в логе возвращаемый объект.Я ничего не вижу в журнале, хотя тег скрипта вводится в голову.

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>

, так что а) Я получаю ошибку не определена jsonFeed и б) onSuccess не запускается :(

Я действительно ценю вашу помощь, ребята. И мне жаль, если я упускаю суть :(

ОБНОВЛЕНИЕ

добавлено:

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

.. и это работает. Спасибо @ Dimitar

Я до сих пор не совсем понимаю, но теперь это работает, помогает при работе.

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

это не работает, потому что имя вашей функции обратного вызова игнорирует то, которое Request.JSONP вместо этого отправляет и возвращает jsonFeed.

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

callbackKey (строка: значения по умолчанию)для обратного вызова) ключ в URL, который сервер использует для переноса результатов JSON.Так, например, если вы использовали callbackKey: 'callback', то сервер ожидает что-то вроде http: //..../? Q = search + term & callback = myFunction ;Это должно быть определено правильно.

вот пример класса, который я написал, который получает материал из flickr - кто использует пользовательский ключ обратного вызова - это нормально.http://fragged.org/mootools-flickr-api-class-via-request-jsonp_1042.html (ps jsfiddle может работать медленно, пятница, 13-е!)

Другое дело, если удаленный конец ПРОДОЛЖАЕТ работать с вами и отказывается отправлять данные в правильно упакованном форматеНапример:

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

, тогда вам нужно убедиться, что

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

, где это глобальный объект (например, окно) - вы не можете охватыватьэто так осторожно, где функция определена.

если сделать последнее, то jsonFeed возьмет на себя функцию обратного вызова при неполной функции.

это можно сделать еще одним способом, который отобразит собственную функцию обратного вызова, определенную классом, и экспортирует ее в ту, которая нравится вашему удаленному хосту:

onRequest: function() {
    var lastCallback;
    Object.each(Request.JSONP.request_map, function(el) {
        lastCallback = el;
    });
    window.jsonFlickrApi = lastCallback;
},
onComplete: function(data) {
...
}
0 голосов
/ 13 мая 2011
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();
...