帮助在Ajax回调中的函数之间传递变量
问题描述:
好的我正在构建一些东西,它向一个服务器发出一个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解析器?
答
试试这个方法同步:
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
答
将'date'存储在全局变量中,并移动逻辑以将HTML元素附加到jsonResponse函数中。你不能从jsonResponse返回控制流,因为它是异步调用的,但你可以继续做任何你想要的功能。
您的代码缩进很差,缺少一些结束括号('}'),并有额外的分号(';')。这使得你很难理解你的代码以及你正在尝试做什么。 – gilly3 2011-05-27 22:43:15
好吧,我清理它,所以希望它不那么困惑... – Zac 2011-05-27 23:51:14
必须将JSONP回调命名为“jsonResponse”?或者你能否在你的请求中指定回调名称?通常,您可以在JSONP请求中指定回调名称,但在这里我看不到您这样做。 – gilly3 2011-05-27 23:59:18