好的我正在构建一个向一个服务器发出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>
答案 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返回控制流,因为它是异步调用的,但你可以继续从该函数做任何你喜欢的事情。