帮助在ajax回调函数之间传递变量

时间:2011-05-27 21:24:42

标签: javascript xml json function variables

好的我正在构建一个向一个服务器发出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语句然后一旦有效,我怎样才能返回在第一个xml解析器中使用的z变量? / p>

2 个答案:

答案 0 :(得分:1)

尝试这种同步方法:

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>");
}

答案 1 :(得分:0)

将'date'存储在全局变量中,并移动逻辑以将HTML元素附加到jsonResponse函数中。你不能从jsonResponse返回控制流,因为它是异步调用的,但你可以继续从该函数做任何你喜欢的事情。