Как передать параметры с функциями обратного вызова в поисковые 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}
Другие вопросы по тегам