2011-08-20 2 views
0

Я пытаюсь извлечь данные с сайта wikilocation.org. Насколько я понимаю, мне нужно использовать jsonp для управления этим. Это в основном работает с этим кодом:Извлечение данных из Wikilocation с помощью jQuery

$.ajax({ 
    url:'http://api.wikilocation.org/articles', 
    dataType: "jsonp", 
    cache: false, 
    jsonp:'onJsonPLoad', 
    jsonpcallbackString: "addPoi", 
    data: {'lng': newPoi.lon, 'lat': newPoi.lat, 'limit':5, 'radius':100, 'jsonp':'addPoi'} 
}); 

Моя проблема в том, что я не хочу, чтобы вызвать другую функцию (addPoi в фрагменте кода), чтобы иметь возможность работать с результатом. Я получаю результат непосредственно внутри функции, где я делаю вызов ajax. Это возможно? Я что-то упускаю?

ответ

2

Это будет работать: Example

$.ajax({ 
    url: 'http://api.wikilocation.org/articles', 
    dataType: "jsonp", 
    jsonpCallback: 'addPoi', 
    cache: false, 
    success: function(data) { 
     alert(data) 
    }, 
    data: { 
     'lng': newPoi.lon, 
     'lat': newPoi.lat, 
     'limit': 5, 
     'radius': 100, 
     'jsonp': 'addPoi' 
    } 
}); 

Вы должны отправить wikilocation имя функции, и сказать Jquery, что ожидать, как вы сделали. Тогда все, что вам нужно сделать, это добавить success: function (data) { ... }

+0

Но это также запустит «jsonpCallback'-Function (addPoi) в этом случае. Почему эта линия важна? – madc

+0

... и похоже, что функция успеха не срабатывает вообще. – madc

+0

Он делает: http://jsfiddle.net/d754b/1/ – Joe

1

более простой способ доступа к WikiLocation через JSONP с JQuery, чтобы использовать функцию $ .getJSON вместе с параметром JSONP обратного вызова как таковой:

$.getJSON("http://api.wikilocation.org/articles?lat=51.500688&lng=-0.124411&limit=1&format=json&jsonp=?", function(data) { 
    // do what ever you want with the returned data 
    console.log(data); 
}); 

С jQuery docs:

С jQuery 1.2 вы можете загрузить данные JSON, расположенные на другом домене, если вы указываете обратный вызов JSONP. Обратный вызов принимает форму «example.com?callback=?». jQuery автоматически заменяет '?' с именем случайного метода, которое не сталкивается с глобальной областью. Вам не нужно указывать имя метода самостоятельно.

Обратите внимание, что сайт, который вы пытаетесь вызвать, должен поддерживать вывод JSON-P. Параметр обратного вызова может варьироваться в зависимости от API, например, Yahoo Pipes требует «_callback =?».

Имейте в виду, что строки после этой функции будут выполнены перед обратным вызовом.

А из WikiLocation документы:

JSONP (необязательно) - если вы используете формат 'JSon', вы можете поставить обратный вызов JSONP с помощью этого параметра. Это приведет к тому, что вывод будет завершен внутри функции обратного вызова (имя которой вы указываете как значение параметра) для междоменного использования.

Спасибо за использование WikiLocation - я построил его;)

+0

Спасибо за фрагмент и за предоставление этого великолепного API! – madc

 Смежные вопросы

  • Нет связанных вопросов^_^