2011-05-27 84 views
0

好的我正在构建一些东西,它向一个服务器发出一个ajax请求,在那里它确定了它需要的url,然后向另一个地方发出一个新的ajax请求。一切都在进步感谢所有在SO =)的帮助..但是我再次卡住了。我很努力让变量返回到我需要的不同功能。第二(JSONP)请求返回一个JSON功能看起来像:帮助在Ajax回调中的函数之间传递变量

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解析器?

+0

您的代码缩进很差,缺少一些结束括号('}'),并有额外的分号(';')。这使得你很难理解你的代码以及你正在尝试做什么。 – gilly3 2011-05-27 22:43:15

+0

好吧,我清理它,所以希望它不那么困惑... – Zac 2011-05-27 23:51:14

+0

必须将JSONP回调命名为“jsonResponse”?或者你能否在你的请求中指定回调名称?通常,您可以在JSONP请求中指定回调名称,但在这里我看不到您这样做。 – gilly3 2011-05-27 23:59:18

回答

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

太棒了!非常感谢你=)! – Zac 2011-05-31 18:56:45

0

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