很抱歉标题不清楚,但我发现任何不适合我的问题的东西。为了更好地解释它是什么让我告诉你我的javascript代码:
function askForIDForCommand()
{
var content;
$.post("Somepage.aspx", function (data)
{
content = $(data).find("#myDiv").html();
});
var myFunc = function () { }
var buttons = [{ text: 'OK', click: myFunc}];
ui_window("Hi", 630, content, buttons);
}
如您所见,我声明了一个名为content的变量。然后我将指定div的html指定给它。然后我将它发送到ui_window函数,该函数只显示带有指定内容的jquery对话框。问题是我没有在对话框中获得该html内容。当我用Firebug查找“内容”的值时,我可以看到它包含html内容。让我感到绝望的是,如果我将上述功能更改为以下功能,则会在对话框中显示html内容:
function askForIDForCommand()
{
var content;
$.post("Somepage.aspx", function (data)
{
content = $(data).find("#myDiv").html();
var myFunc = function () { }
var buttons = [{ text: 'OK', click: myFunc}];
ui_window("Hi", 630, content, buttons);
});
}
如果您无法注意到差异,我只需将ui_window调用到$ .post()方法中。它有效。为什么?
以下是html内容以备不时之需:
<table>
<tr>
<td align="right">
<label>
Enter the ID:</label>
</td>
<td>
<input id="txtID" type="text" onkeydown="return onlyNumbers(event);" maxlength="8"/>
</td>
</tr>
</table>
答案 0 :(得分:4)
在致电content
之前,您不分配给ui_window
。该分配在您的anomyous函数中发生,因此直到有人调用该函数(即,一旦完成对Somepage.aspx的帖子)后才会执行。
相比之下,只要您将开始帖子发送到Somepage,就会调用ui_window()
,但无需等待该操作完成。那时您的完成功能仍然没有被调用,因此content
仍然包含undefined
。
答案 1 :(得分:2)
问题是当你收到服务器的响应时会调用内部函数。然后在第一种情况下,当执行这些行时,尚未分配变量,而在第二种情况下,您确定使用可用数据调用ui_window
。
答案 2 :(得分:1)
问题是对服务器的AJAX调用。在第一种情况下,您发送请求并直接转到下一个命令,即myFunc等。因此,此时您的内容变量尚未初始化。