【问题标题】:javascript post failing others work fine - form relatedjavascript post失败其他人工作正常 - 表单相关
【发布时间】:2015-04-12 10:39:21
【问题描述】:

我正在尝试通过 onsubmit 发布从表单中提取的一些数据。即使标头和 POST 数据看起来不错,POST 也会失败(firebug 将其显示为失败)。我有很多其他的 POST 工作正常。使用的代码是现有代码的副本,只是做了一些更改(响应函数和调用的 php 函数)。

我已尝试将要发送的数据减少到最低限度,但仍然失败。我还尝试将调用的 PHP 函数减少为只回显一个小字符串,实际上只是一行。

我能看到的唯一区别是这个过程是从表单 onsubmit 调用的。以下是部分代码:

首先是表单(部分)

<form id="jmcase" onsubmit=" return FLWG_editSubmit(18)" method="post">
<input id="jmcasename" type="text" size="150" value="Butler v Time [2015] 234" name="jmcasename">
<input type="submit" value="Submit">........
</form>

FLWG_editSubmit 函数调用:-

function FLWG_editSubmit($caseid) {

// Build variables to be posted
    var pstv = 'FLWGcaseid='+caseid;
// get lists from form
    pstv = pstv+formToPostVars('jmjudge','r,,sdl,tdl,udl');
    pstv = pstv+formToPostVars('jmcat','r,,sdl,tdl,udl');
    pstv = pstv+formToPostVars('jmcsl','r,,sdl,tdl');
    pstv = pstv+formToPostVars('jmsid','r,,sdl,tdl');
    pstv = pstv+formToPostVars('jmauth','r,,sdl,tdl');
    pstv = pstv+formToPostVars('jmact','r,,sdl,tdl');
    **updateCase**(caseid,pstv);

    //var obj = newRequestObject();
    //obj.onreadystatechange = function() {
    //  if (obj.readyState == 4) {
    //      if (obj.status == 200) {
    //          editCaseReturn(htmlspecialchars_decode(obj.responseText, 'ENT_QUOTES'));
    //          delete obj;
    //          obj = null;
    //      }
    //  }
    //}
    //obj.open('POST','include/FLWG_updateCase.php',true);
    //obj.setRequestHeader('Accept-Charset','utf-8');
    //obj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    //obj.send("TEST=XXX");`enter code here`

}

函数 updateCase 是注释掉的代码的另一个版本,它本身是工作 POST 的副本(a虽然最后使用注释的版本只是发送一个 sn-p 数据这也失败了)。反正就是这样:

function updateCase(caseid,pstv) {

    var obj = newRequestObject();
    obj.onreadystatechange = function() {
        if (obj.readyState == 4) {
            if (obj.status == 200) {
                browseCaseReturn(htmlspecialchars_decode(obj.responseText, 'ENT_QUOTES'));
                delete obj;
                obj = null;
            }
        }
    }
    obj.open('POST','include/FLWG_ucase.php',true);
    obj.setRequestHeader('Accept-Charset','utf-8');
    obj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    obj.send(pstv);
}

我刚刚尝试从表单中删除 method="post"。这导致 POST 错误 414 URI 太大(数据可能很大,因为它们是法庭案件)所以我认为它默认获取。我把它改回了 method="post" 而不是 414。

我的猜测是表单可能正在发布,由于某种原因我的 POST 失败,因为表单的 POST 尚未处理。如果是这样,那么我该如何停止表单发布(看到帖子说使用 onsubmit 而不是 onclick 更好)。我在这里搜索了很多帖子,但似乎没有一个涵盖这个问题。我很确定发送的基础数据没有问题(请求 POST 显示了相应 POST 变量中的所有预期数据)。

任何帮助/建议将不胜感激。

PS 这是我的第一篇文章。

【问题讨论】:

  • 我刚刚看到,如果您右键单击 POST 请求(在 Firebug 中),您可以重新发送请求。我在一个失败的请求上尝试了这个并且请求有效。所以看起来确实存在冲突,也许是失败背后的时机。

标签: javascript php forms http http-post


【解决方案1】:

如果这是您的确切 JS 代码,那么您必须删除函数定义中的 $。

function FLWG_editSubmit($caseid) {

// Build variables to be posted
    var pstv = 'FLWGcaseid='+caseid;

  ...

}

【讨论】:

  • @JRemmenud,我已经删除了它,但仔细检查了它,它不存在(不确定它是如何进入的)。说我已经找到了答案(我认为)。那就是在提交时包含event.preventDefault();。即onsubmit="event.preventDefault(); return FLWG_editSubmit(18)"。我现在只需要检查我想要的实际代码。
【解决方案2】:

根据评论并检查真实数据后,答案是阻止默认表单提交。根据:

onsubmit="event.preventDefault(); return FLWG_editSubmit(18)"

Answered obtained from here

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    相关资源
    最近更新 更多