Javascript 如果未嵌套在另一个函数中,函数将无法正常工作

Javascript 如果未嵌套在另一个函数中,函数将无法正常工作,javascript,jquery,Javascript,Jquery,很抱歉标题不清楚,但我找不到任何适合我的问题的内容。为了更好地解释它是什么,让我向您展示我的javascript代码: function askForIDForCommand() { var content; $.post("Somepage.aspx", function (data) { content = $(data).find("#myDiv").html(); }); var myFunc = function () { } var buttons

很抱歉标题不清楚,但我找不到任何适合我的问题的内容。为了更好地解释它是什么,让我向您展示我的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_窗口函数,该函数只显示具有指定内容的jquery对话框。问题是我在对话框中没有得到html内容。当我用Firebug查找“content”的值时,我可以看到它包含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_窗口的调用放在$.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>

输入ID:

在调用
ui\u窗口之前,您未分配到
内容
。该赋值发生在您的anomyous函数中,因此直到有人调用该函数(即,发送到Somepage.aspx的帖子完成后)才会执行


与此相反,您在开始向某个页面发送邮件时,会立即调用
ui\u window()
,但不会等待该操作完成。那时您的完成函数还没有被调用,因此
内容
仍然包含
未定义

问题在于对服务器的AJAX调用。在第一种情况下,您发送一个请求并直接转到下一个命令,即myFunc等等。因此,您的内容变量此时未初始化。

问题在于,当您收到服务器的响应时,会调用内部函数。然后,在第一种情况下,当执行这些行时,变量尚未赋值,在第二种情况下,您可以确保使用可用数据调用
ui\u窗口。

在A中读取。在这种情况下,你建议我怎么办。我的意思是,我想把“内容获取”部分包装成一个函数,该函数将返回内容。@MikeJM:你不能。启动AJAX操作总是在数据准备就绪之前立即返回,通常在您从当前操作返回并让浏览器执行Javascript代码之外的其他操作之前,它不会准备就绪。使用它的唯一方法是让需要数据的任何计算都从回调函数中发生——这就是为什么首先要给出回调函数的原因。@Henning,我找到了一种方法。我刚刚意识到,$.post只是带有post类型的$.ajax(…)的简写。默认情况下,Ajax调用是异步的。如果我将其设置为false,那么接下来的命令将不得不等待ajax调用完成。我试过了,它完全符合我的要求