以下是我的javascript代码..我宣布变量' allproductsAndPrice'在函数之外..但是在初始化之后我无法访问它。难道我做错了什么? 当我试图提醒它时,它不打印任何东西。
var allproductsAndPrice = "";
$.getJSON("/Home/GetProducts",
function (data, textStatus, jqXHR) {
for (var i = 0; i < data.length; i++) {
allproductsAndPrice = allproductsAndPrice +
"<option name='productName' id=" + data[i].productPrice + ">" +
data[i].Pname + "</option>";
}
}
);
alert(allproductsAndPrice);
答案 0 :(得分:1)
这里的错误是在调用getJSON
的回调之前会调用警报。这意味着allProductsAndPrice
始终是警报中的空字符串。
对getJSON
的调用是异步的,这意味着它将在ajax请求上触发“完成”事件,然后将执行回调。你可以调用getJSON同步,但这有点违背这个想法。
为了更好地了解现在发生的事情是这样的:
allproductsAndPrice
初始化为“”。allproductsAndPrice
仍为“”allproductsAndPrice
你应该做的是:
var allproductsAndPrice = "";
$.getJSON("/Home/GetProducts",
function (data, textStatus, jqXHR) {
for (var i = 0; i < data.length; i++) {
allproductsAndPrice = allproductsAndPrice + "<option name='productName' id=" + data[i].productPrice + ">" + data[i].Pname + "</option>";
}
// More code that should be executed
alert(allproductsAndPrice);
});
答案 1 :(得分:0)
试试这个。这将有效并帮助您识别是否存在错误。 第二件事var allproductsAndPrice 将在警报中保持为空,因为ajax请求是异步的,javascript不会等待ajax响应。
var allproductsAndPrice = "";
try {
$.getJSON("/Home/GetProducts", function(data) {
for (var i = 0; i < data.length; i++) {
allproductsAndPrice = allproductsAndPrice + "<option name='productName' id=" + data[i].productPrice + ">" + data[i].Pname + "</option>";
}
});
} catch (e) {
alert(e.message);
}
alert(allproductsAndPrice);