在调用之前发出警报时执行函数

时间:2014-03-21 14:27:14

标签: javascript json

首先,我对这个非常模糊的标题感到抱歉,但我不知道如何命名这个标题。因此,如果有人有更好的名字,请告诉我,我会对其进行编辑。

我制作了某种计算器,计算所有权成本。值的输入来自用户或来自数据库的预设。可以使用select选择预设,然后使用onchange-event更改输入数据。

<select id="myID" onchange="getPreset(this.value)">
  <option>Some options...</option>
</select>

getPreset()函数中我做了一些事情+我调用了另一个函数,我用它来通过JSON从数据库中获取数据。

function getInfo(name){
  var xmlhttp;

  if(window.XMLHttpRequest)
  {
    xmlhttp = new XMLHttpRequest();
  }

  xmlhttp.onreadystatechange = function()
  {
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
      var info = JSON.parse(xmlhttp.responseText);

      //process data
      calculate();
    }
  }

  xmlhttp.open("GET", "myphppage.php?name="+name, true);
  xmlhttp.send();
}

这就是我的代码现在的样子,它可以正常工作。但是在calculate(); xmlhttp.send();之后放置xmlhttp.onreadystatechange = function() { if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { var info = JSON.parse(xmlhttp.responseText); //process data } } xmlhttp.open("GET", "myphppage.php?name="+name, true); xmlhttp.send(); alert("make it work."); calculate(); } 之前,它没有按照应有的方式工作。仅在我选择其他选项后才计算数据。例如:我第一次选择选项1 - 没有任何反应。我第二次选择选项2 - 选择数据,就像选择选项1一样。

我知道放置这个函数只是错误的地方,但是我发现这很奇怪:如果我在调用函数之前发出警报,数据就会被计算出来。所以我的代码如下(所以你可以直观地看到它):

{{1}}

由于我不知道为什么会这样,而且我很想知道,我在这里问它。我希望有人可以帮我解释一下。

1 个答案:

答案 0 :(得分:0)

这是因为一切都是异步的。当警报弹出时(最终)获取数据并正确计算。这就是它的原因。如果连接速度很慢或者您在警报按钮上单击“确定”非常快,则可能会失败。这就是为什么你应该把它放在正确的地方:))