Несколько запросов JSONP кросс-домена JQuery для каждого с одним и тем же обратным вызовом - PullRequest
0 голосов
/ 26 октября 2011

Может ли кто-нибудь показать мне, как сделать 3 междоменных запроса jsonp, каждый с одним и тем же обратным вызовом jsonp, который просто получает содержимое и записывает его на страницу?

Я пытаюсь создать массив URL для циклического прохождения.что я хочу запустить запрос jsonp для каждого из URL.Для каждого ответа я хочу взять этот объект json, а затем записать данные в раздел страницы.Мне все равно, в каком порядке. Если я использую функцию $ .each, мне нужно учитывать область действия?Поскольку у меня определена только одна функция обратного вызова, и я хочу переопределить обратный вызов jsonp, поэтому она всегда вызывает одну и ту же функцию, но эта функция достаточно умна, чтобы знать, какой объект был возвращен, и записать его на страницу.

Вот мой код:

    $(document).ready(function() {
        $.getJSON('/server/webcontent/js/env-urls-local.js', function(data) {


                $.each(data.env.urls, function(index, url) {
                        //alert(url.path);
                        $.ajax({
                            url: url.path, 
                            dataType: 'jsonp',
                            async: false,
                            cache: false,
                            done: function(sData, textStatus, jqXHR){

                                var targetreleasediv = "." + url.target + ' td:nth-child(2)';
                                var targetdescdiv = "." + url.target + ' td:nth-child(3)';

                                //alert(targetreleasediv);
                                //alert(targetdescdiv);

                                $(targetreleasediv).html(sData.env.v);
                                $(targetdescdiv).html(sData.env.desc);
                            },
                            fail: function(jqXHR, textStatus, errorThrown){
                                alert("Error " + jqXHR.responseText+ " error thrown is " + errorThrown + " status is " + textStatus);
                                var targetreleasediv = "." + url.target + ' td:nth-child(2)';
                                var targetdescdiv = "." + url.target + ' td:nth-child(3)';

                                //$(targetreleasediv).html("server is currently down");
                                //$(targetdescdiv).html("server is currently down");

                            }
                        });


                });


            });

    });

Вот массив json с URL:

{
   "env":{
      "urls":[
         {
            "path":"http://server.domain.com/server/webcontent/js/evt2_server1.js",
            "target":"env2-server"
         },
         {
            "path":"http://server.domain.com/server/webcontent/js/evt2_server2.js",
            "target":"env2-server2"
         }
      ]
   }
}

Вот строка json, на которую возвращается запрос

{"env":{"v":"Tag_12345","desc":"Test of purpose"}}

Теперь я, когда я отправляю страницу, я получаю запросы json ajax, но не вызывается метод done или fail.

Ответы [ 2 ]

0 голосов
/ 27 октября 2011

Я вижу несколько проблем с вашим кодом:

  1. reqQueue не должен быть массивом.То, как вы используете его, это должен быть объект.Как только вы измените / исправите пункт 2) здесь, я не думаю, что вам даже понадобится reqQueue.
  2. Вы определяете обработчики .success и .error после выполнения вызова ajax.Они должны быть определены до вызова ajax.Я бы предложил определить их внутри структуры данных ajax, чтобы они передавались прямо в функцию ajax при ее первоначальном создании.
  3. Если у вас нет конкретной проблемы, которую вы пытаетесь решить, я думаю, вам следует удалить *Опция 1010 * из параметров ajax.Согласно документу jQuery ajax, лучше всего позволить jQuery управлять этим именем функции.
0 голосов
/ 26 октября 2011

$.each и $().each отличаются от цикла for тем, что для каждого элемента, через который он проходит, выполняемая функция находится в своей области видимости. Вы должны иметь возможность просто использовать один и тот же обратный вызов в каждом вызове jsonp, не беспокоясь.

...