2011-05-27 121 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返回控制流,因爲它是異步調用的,但你可以繼續做任何你想要的功能。