读书人

JS ajax 执行先后的 有关问题。来帮个

发布时间: 2013-01-06 15:44:48 作者: rapoo

JS ajax 执行先后的 问题。。。来帮个!!!!



var currencySelhtm = "";
$.ajax({
url: "/servlet/CurrencyAction.do",
type: "post",
dataType: "xml",
data: "action=showall",
success: function(xmlResult) {
var $xml = $(xmlResult).find("Currency");
if ($xml.length < 1) {
} else {
for (var m = 0; m < $xml.length; m++) {
var Currency_Name = $xml.eq(m).attr("Currency_Name");
var Currency_Signcode = $xml.eq(m).attr("Currency_Signcode");
var Currency_ID = $xml.eq(m).attr("Currency_ID");
currencySelhtm += '<option value="' + Currency_ID + '">' + Currency_Name+'</option>';

}
}
},
error: function() {
currencySelhtm = "";
}
});
alert(currencySelhtm);

result += "币种:<select name='tcurrencys' id='tcurrencys'><option value='-1'>---</option >" + currencySelhtm + "</select><br/><br/>";



有以上代码,我想动态生成币种 这个下拉框的 OPT选项。

遇到的问题:
程序先执行了 result 的拼串 动作。使得currencySelhtm 后做 AJAX 获取的数据 无法拼凑进 目标SELECT 元素。大家有没有其他的 办法?谢谢了
[解决办法]
var currencySelhtm = "";
$.ajax({
url: "/servlet/CurrencyAction.do",
type: "post",
dataType: "xml",
data: "action=showall",
success: function(xmlResult) {
var $xml = $(xmlResult).find("Currency");
if ($xml.length < 1) {
} else {
for (var m = 0; m < $xml.length; m++) {
var Currency_Name = $xml.eq(m).attr("Currency_Name");
var Currency_Signcode = $xml.eq(m).attr("Currency_Signcode");
var Currency_ID = $xml.eq(m).attr("Currency_ID");
currencySelhtm += '<option value="' + Currency_ID + '">' + Currency_Name+'</option>';


}
alert(currencySelhtm);
//你要怎么使用这个currencySelhtm的方法放在这个回调函数中即可
}
},
error: function() {
currencySelhtm = "";
}
});


result += "币种:<select name='tcurrencys' id='tcurrencys'><option value='-1'>---</option >" + currencySelhtm + "</select><br/><br/>";


[解决办法]

var currencySelhtm = "";
$.ajax({
url: "/servlet/CurrencyAction.do",
type: "post",
dataType: "xml",
data: "action=showall",
success: function(xmlResult) {
var $xml = $(xmlResult).find("Currency");
if ($xml.length < 1) {
} else {
for (var m = 0; m < $xml.length; m++) {
var Currency_Name = $xml.eq(m).attr("Currency_Name");
var Currency_Signcode = $xml.eq(m).attr("Currency_Signcode");
var Currency_ID = $xml.eq(m).attr("Currency_ID");
currencySelhtm += '<option value="' + Currency_ID + '">' + Currency_Name+'</option>';

}
result += "币种:<select name='tcurrencys' id='tcurrencys'><option value='-1'>---</option >" + currencySelhtm + "</select><br/><br/>";
alert(currencySelhtm);
}
},
error: function() {
currencySelhtm = "";
}
});


AJAX 的本意, 就是异步JavaScript和XML。 所以前面的事情刚开始做,不管有没有做完, 马上就会执行下一条语句。

如果你想在提交之后才做某个事情, 两种解决方案:
1. 写在 $.ajax 的回调函数之中。
2. 将 $.ajax 设置为同步 async:false , 不过这样并不好, 会造成页面短时间无法操作。
[解决办法]
var currencySelhtm = "";
$.ajax({
url: "/servlet/CurrencyAction.do",
type: "post",
async:false,///////加这句同步就行了
dataType: "xml",
data: "action=showall",


success: function(xmlResult) {
var $xml = $(xmlResult).find("Currency");
if ($xml.length < 1) {
} else {
for (var m = 0; m < $xml.length; m++) {
var Currency_Name = $xml.eq(m).attr("Currency_Name");
var Currency_Signcode = $xml.eq(m).attr("Currency_Signcode");
var Currency_ID = $xml.eq(m).attr("Currency_ID");
currencySelhtm += '<option value="' + Currency_ID + '">' + Currency_Name+'</option>';

}
}
},
error: function() {
currencySelhtm = "";
}
});
alert(currencySelhtm);

result += "币种:<select name='tcurrencys' id='tcurrencys'><option value='-1'>---</option >" + currencySelhtm + "</select><br/><br/>";

读书人网 >JavaScript

热点推荐