【问题标题】:$.Post with Form submit$.Post 与表单提交
【发布时间】:2010-12-24 01:36:34
【问题描述】:

...提交了一些表单...

$.("form").submit(function() {
saveFormValues($(this), "./../.."; }

function saveFormValues(form, path) {
var inputs = getFormData(form);
var params = createAction("saveFormData", inputs);
var url = path + "/scripts/sessions.php";
$.post(url, params);
}


奇怪的是,如果我向
$.post(url, params, function(data) {
alert(data); }

添加一个函数 我收到一个空白的警报声明。

在scripts/sessions.php 中,我有一个函数可以将$_POST 信息保存到文件中,而sessions.php 从不保存这个saveFormValues 调用。它永远不会出现在文件中。但是,如果我继续尝试保存它,大约每 15 次实际上会允许保存它。这让我相信表单 POST 以某种方式阻止了这个价值节省的帖子。有什么帮助吗?

【问题讨论】:

  • saveFormValues($(this), "./../../";' is actually saveFormValues($(this), "./../../");'

标签: javascript jquery ajax forms post


【解决方案1】:

在提交函数中添加return false;,以防止表单提交:

$.("form").submit(function() {
saveFormValues($(this), "./../.."); return false });

更新:

如果你想稍后提交表单,保留一个变量来表明它是否可以提交:

var canSubmit = false;
$.("form").submit(function() {
    if(!canSubmit)
    {
        saveFormValues($(this), "./../..");
        return false;
    }
});

及以后:

$.post(url, params, function(data) {
    alert(data); 
    canSubmit = true; 
    $.("form").submit();
}

【讨论】:

  • 但是我也想提交表单,但是如果有任何错误,首先保存信息。
【解决方案2】:

所以我没有做 $.post,而是尝试做一个 $.ajax 并将 asynch 设置为 false。它每隔...保存表单值 3/5 次...有什么新建议吗?

【讨论】:

    【解决方案3】:

    您需要通过从处理程序返回 false 来取消原始提交。 更新:如果您希望继续提交原始表单,则可以删除处理程序并从 post 回调中重新提交表单。

    $.("form").submit(function() {
        saveFormValues($(this), "./../..");
        return false; // cancels original submit and allows AJAX post to complete
    });
    
    function saveFormValues(form, path) {
        var inputs = getFormData(form);
        var params = createAction("saveFormData", inputs);
        var url = path + "/scripts/sessions.php";
        $.post(url, params, function() {
           $('form').unbind('submit').trigger('submit');
        });
    }
    

    【讨论】:

    • @tvanfosson 如果 SO 上有办法查看其他用户何时更新他的答案,那会节省我的时间!
    • @Michael - 您可能需要考虑简单地通过 AJAX 进行验证,而不是保存值。这对我来说似乎比允许它发布不正确的值更合理。
    • 好的,这确实有效,除了有一个问题。有了这个,我需要点击提交按钮 2x... 每次。我无法让它在第一次尝试时提交,但在第二次尝试时提交。
    • @tvanfosson 我做的一件事是我有一些字段是每个表单隐藏的,我不想有一个巨大的 if 语句不将这些值保存到会话信息中,而是我能够,使用 jQuery,只需使用 this.type != "hidden" 删除任何表单字段,然后我就可以只保存我想为用户保存的字段。因此,如果实际表单提交出现错误,则旧值会被添加回来,否则旧值会因为提交成功而被删除。如果有更简单的方法可以做到这一点,我会很兴奋。 :)
    • @Michael,您可能需要在回调中使用触发器而不是提交。
    【解决方案4】:

    所以我决定创建一个不会从表单中保存的项目的关联列表。

    $nosave = array("password" => true, "confirmPassword" => true, "descriptionCount" => true, "detailedDescriptionCount" => true, "submit" => true, "action" => true, "p" => true); //Then i decided to go through the $_POST information and save it to the SESSION info.
    foreach ($_POST as $key => $value) {
    if ($key != $id && !array_key_exists($key, $nosave)) {
    //saves the value to the form.
    $_SESSION[$id][$key] = $value;
    }
    }

    //$id 是隐藏输入.. name="formId" value="someUniqueId" 每次都这样
    //表单信息被保存,它保存在一个独特的区域下,可以很容易地取消设置。


    我没有通过 jQuery 来做,而是调用了一个函数,它在我的 sessions.php 文件中大致完成了所有这些工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 2021-09-02
      • 2013-08-24
      • 2017-10-23
      相关资源
      最近更新 更多