Как передать параметры с функциями обратного вызова в поисковые API, такие как Yahoo BOSS и BING?
Я использую Yahoo BOSS и Bing API, чтобы обеспечить функциональность поиска на моем сайте. В частности, я использую их форматы ответов JSON, в которых я передаю функцию обратного вызова поисковому провайдеру, который позднее будет вызываться с результатами поиска. Моя функция обратного вызова на самом деле вызывается, но проблема в том, что если я делаю более одного запроса за раз, я не могу сказать, для какого запроса нужен определенный ответ. Для этого есть ли способ передать дополнительные параметры с функцией обратного вызова поставщику поиска, чтобы я мог позже использовать его для определения того, какой ответ идет на какой запрос? Спасибо
1 ответ
У меня такая же проблема с тобой! Я погуглил и нашел некоторые решения, и я решил свою проблему. Теперь я покажу это вам, надеюсь, это поможет вам:)
Предыдущий код:
function MakeGeocodeRequest(credentials) {
var pins = checkLocation.d
$.each(pins, function (index, pin) {
var geocodeRequest = 'http://ecn.dev.virtualearth.net/REST/v1/Locations/' + pin.City + ',' + pin.Country + '?output=json&jsonp=GeocodeCallback&key=' + credentials;
CallRestService(geocodeRequest);
});
function CallRestService(request) {
var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", request);
document.body.appendChild(script);
}
function GeocodeCallback (result) {.., чтобы сделать с обратным вызовом результата, -> я хочу добавить некоторую информацию о пине здесь}
Поскольку каждый сценарий при добавлении в документ (document.body.appendChild (script);) будет запускаться -> и вызываться, вы не сможете добавить больше параметров.
Я решаю это по запросу через ajax (больше не добавляет к документу), когда успешный вызов ajax -> я вызываю GeocodeCallback (result, pin). Вот полный код.
function MakeGeocodeRequest(credentials) {
var pins = checkLocation.d;
$.each(pins, function (index, pin) {
$.ajax({
url:"http://ecn.dev.virtualearth.net/REST/v1/Locations/",
dataType: "jsonp",
data:{key:credentials,q:pin.City + ',' + pin.Country},
jsonp:"jsonp",
success: function(result){
GeocodeCallback(result,pin);
}
});
});
}
function GeocodeCallback(result,pin) { ... to do here}