Помогите передать переменные между функциями в обратных вызовах ajax - PullRequest
0 голосов
/ 28 мая 2011

ОК. Я создаю что-то, что делает ajax-запрос к одному серверу, где он определяет URL-адрес, необходимый для создания нового ajax-запроса в другое место. Все прогрессирует благодаря всей помощи в SO =) .. однако я снова застрял. Я пытаюсь заставить переменные возвращаться к различным функциям по мере необходимости. Второй (jsonp) запрос возвращает функцию json, которая выглядит следующим образом:

jsonResponse(
{"it.exists":"1"},"");

и мой код ...

var img = "null";
var z = "null";

$(document).ready(function()
{
  $.ajax({
    type: "GET",
    url: "connect.php",
    dataType: "xml",
    success:   function  parseXml(data)
        {
          $(data).find("ITEM").each(function()
            {
            query = $("SKU", this).text();
            query = 'http://domain.com/' + query + '?req=exists,json';
            img = $("SKU", this).text();
            img = '<img src="http://domain.com/' + img + '">';  
            var date =$("LAST_SCAN" , this).text();
                $.ajax({
                    url: query,
                    dataType: 'jsonp'       
                    });
                $("table").append('<tr>'+'<td>' + (date) + '</td>' + '<td>' + (z) + '</td>');
            });
        }
    });
});

// function required to interpret jsonp

function jsonResponse(response){
  var x = response["it.exists"];
  // console.log(x); 
  if (x == 0) {
    console.log("NO"); 
    var z = "NO IMG";
    }
  if (x == 1) {
   console.log(img); 
    //this only returns the first image path from the loop of the parseXml function over and over
    var z = (img);  
  }
    return z;
}

Итак, я полагаю, что моя проблема состоит из двух частей ... один, как мне заставить переменную img зацикливаться на этом операторе if, а затем, когда это сработает, как я могу вернуть эту переменную z для использования в первом парсере xml?

Ответы [ 2 ]

1 голос
/ 28 мая 2011

Попробуйте этот синхронный подход:

var itemQueue = [];

$(document).ready(function ()
{
    $.ajax({
        type: "GET",
        url: "connect.php",
        dataType: "xml",
        success: function parseXml(data)
        {
            itemQueue= $(data).find("ITEM").map(function ()
            {
                return {
                    sku: $("SKU", this).text(),
                    date: $("LAST_SCAN", this).text()
                };
            }).get();
            getNextItem();
        }
    });
});

function getNextItem()
{
    var item = itemQueue[0];
    var query = "http://domain.com/" + item.sku + "?req=exists,json";
    $.ajax({
        url: query,
        dataType: 'jsonp'
    });
}

function jsonResponse(response)
{
    var item = itemQueue.shift();
    if (itemQueue.length)
    {
        getNextItem();
    }
    var x = response["it.exists"];
    var z = x == "0" ? "NO IMG" : "<img src=\"http://domain.com/" + item.sku + "\">";
    $("table").append("<tr><td>" + item.date + "</td><td>" + z + "</td>");
}
0 голосов
/ 28 мая 2011

Сохраните 'date' в глобальной переменной и переместите логику для добавления элементов HTML в функцию jsonResponse. Вы не можете вернуть поток управления из jsonResponse, потому что он вызывается асинхронно, но вы можете продолжать делать что угодно из этой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...