javascript post 失败的其他人工作正常 - 与表单相关
javascript post failing others work fine - form related
我正在尝试 POST 通过 onsubmit 从表单中提取一些数据。 POST 失败(firebug 显示为失败),即使 headers 和 POST 数据看起来不错。我有很多其他 POST 的工作正常。使用的代码是现有代码的副本,仅进行了一些更改(响应函数和调用的 php 函数)。
我试过将要发送的数据减少到最少,还是失败了。我还尝试减少调用的 PHP 函数以仅回显一个小字符串,实际上只是一行。
我能看到的唯一区别是这个过程是从表单提交时调用的。这是一些代码:
首先是表格(部分)
<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虽然注释掉了verson 上次仅用于发送一小段数据,但也失败了)。无论如何:
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);
}
我刚刚尝试从表单中删除方法="post"。这导致 POST 错误 414 URI 太大(数据可能很大,因为它们是法庭案件)所以我假设它默认获取。我把它改回 method="post" 而不是 414.
我的猜测是表单可能正在 POSTing 并且由于某种原因我的 POST 失败了,因为表单的 POST 尚未处理。如果是这样,那么我如何停止表单 posting(看到 posts 说最好使用 onsubmit 而不是 onclick)。我在这里搜索了很多 post,但 none 似乎涵盖了这个问题。我很确定发送的基础数据没有问题(请求 POST 在相应的 POST 变量中显示所有预期数据)。
任何 assistance/advice 将不胜感激。
PS这是我的第一个post。
如果这正是您的 JS 代码,那么您必须删除函数定义中的 $。
function FLWG_editSubmit($caseid) {
// Build variables to be posted
var pstv = 'FLWGcaseid='+caseid;
...
}
根据评论和真实数据检查后答案是防止默认表单提交。根据:
onsubmit="event.preventDefault(); return FLWG_editSubmit(18)"
Answered obtained from here
我正在尝试 POST 通过 onsubmit 从表单中提取一些数据。 POST 失败(firebug 显示为失败),即使 headers 和 POST 数据看起来不错。我有很多其他 POST 的工作正常。使用的代码是现有代码的副本,仅进行了一些更改(响应函数和调用的 php 函数)。
我试过将要发送的数据减少到最少,还是失败了。我还尝试减少调用的 PHP 函数以仅回显一个小字符串,实际上只是一行。
我能看到的唯一区别是这个过程是从表单提交时调用的。这是一些代码:
首先是表格(部分)
<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虽然注释掉了verson 上次仅用于发送一小段数据,但也失败了)。无论如何:
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);
}
我刚刚尝试从表单中删除方法="post"。这导致 POST 错误 414 URI 太大(数据可能很大,因为它们是法庭案件)所以我假设它默认获取。我把它改回 method="post" 而不是 414.
我的猜测是表单可能正在 POSTing 并且由于某种原因我的 POST 失败了,因为表单的 POST 尚未处理。如果是这样,那么我如何停止表单 posting(看到 posts 说最好使用 onsubmit 而不是 onclick)。我在这里搜索了很多 post,但 none 似乎涵盖了这个问题。我很确定发送的基础数据没有问题(请求 POST 在相应的 POST 变量中显示所有预期数据)。
任何 assistance/advice 将不胜感激。
PS这是我的第一个post。
如果这正是您的 JS 代码,那么您必须删除函数定义中的 $。
function FLWG_editSubmit($caseid) {
// Build variables to be posted
var pstv = 'FLWGcaseid='+caseid;
...
}
根据评论和真实数据检查后答案是防止默认表单提交。根据:
onsubmit="event.preventDefault(); return FLWG_editSubmit(18)"
Answered obtained from here