使用条件检查表单提交?

时间:2011-04-21 09:10:39

标签: javascript ajax forms

有没有办法检查是否使用if语句提交表单?

我正在尝试编写一个函数,无论用户做什么,信息总是被收到并显示给他们。但是,如果用户提交表单,它会将该数据发送到数据库并首先更新它。

我一直在努力寻找帮助我解决这个问题的事件或方法,但似乎找不到任何有用的东西。

function getData(){

if ( FORM SUBMITTED ) {
    //POST and send
    request.open("POST", url, true);
    request.onreadystatechange = useResponse;
    request.send(str);
}

//GET and display
request.open("GET", url, true);
request.onreadystatechange = useResponse;
request.send(null);

}

编辑:我没有刷新页面。我忘了提到我正在使用AJAX这样做。页面加载时,此函数最初运行(显示表单数据)。但我不希望表单发送任何数据,因为我只是加载页面而不是实际提交任何内容。

加载页面后我点击提交,调用此函数。我需要的是AJAX通过POST发送表单数据,然后重新显示它(上面的脚本概述了该功能)。

提交表单时只调用函数: action="javascript:getData()"

2 个答案:

答案 0 :(得分:1)

我不太明白你在问什么,因为如果提交了一个表单,那么浏览器正在加载一个新的HTTP响应,该响应可能或可能不知道任何导致它生成的HTML表单。

<强> [编辑]

看起来“getData”函数做了太多事情,我会创建单独的函数来处理“get”和“post”请求,例如:

<body>
  <form name="form" action="#">...</form>
  <script type="text/javascript">
    var getData = function() {
      // XHR GET data and update DOM...
    };
    getData();
    var sendData = function() {
      // XHR POST form encoded data from form input elements...
    };
    document.form.onsubmit = function() {
      sendData();
      getData();
      return false; // Block the actual form submit event.
    };
  </script>
</body>

jQuery serialize() function演示了以编程方式对表单数据进行编码所需的内容。

答案 1 :(得分:0)

嗯,我希望我能正确理解你。你基本上想(有条件地)POST到一个URL并从另一个(或同一个)GET串行发送?

如果是这种情况,您的代码看起来就像......

var get = function(callback) {
  var req = new XMLHttpRequest();
  req.open = req.open('GET', url);
  req.onreadystatechange = function() {
    if (...) {
      callback(req.responseText);
    }
  };
  req.send();
};

var exec = function(callback) {
  if (FORM_SUBMITTED) {
    var req = new XMLHttpRequest();
    req.open('POST', url);
    req.onreadystatechange = function() {
      if (...) {
        get(callback);
      }
    };
    req.send();
  } else {
    get(callback);
  }
};

exec(function(data) {
  console.log('request(s) complete, here's the response: '+data);
});

由于XHR只是非常值得 - 当异步使用时,你必须嵌套一些回调以确保所有内容都是串行发生的,否则,GET可能会在POST之前完成。