jQuery到PHP:没有输入。。。有点

jQuery到PHP:没有输入。。。有点,php,jquery,ajax,http,Php,Jquery,Ajax,Http,如果有必要的话,我将使用jQuery将HTTP请求发布到我的PHP页面Apache/Linux。我在客户机上仔细验证,以便不发送空请求。但有时,我会收到这样一个空请求: -$\u POST collection empty$\u GET collection也为空; -内容长度为非零—小于100的数字,与我的脚本中的有效帖子一致 -内容类型正确应用程序/x-www-form-urlencoded -阅读php://input 生成一个空字符串 就好像$_POST在途中不知怎么被吃掉了。我非常仔细

如果有必要的话,我将使用jQuery将HTTP请求发布到我的PHP页面Apache/Linux。我在客户机上仔细验证,以便不发送空请求。但有时,我会收到这样一个空请求: -$\u POST collection empty$\u GET collection也为空; -内容长度为非零—小于100的数字,与我的脚本中的有效帖子一致 -内容类型正确应用程序/x-www-form-urlencoded -阅读php://input 生成一个空字符串

就好像$_POST在途中不知怎么被吃掉了。我非常仔细地检查了代码-我没有对$u POST的内容做任何修改

澄清:我确实在服务器上发现了这种情况;我的代码并不是死得很惨。但我有一种非常强烈的感觉,这不是真正缺少用户输入,而是某种数据损坏。否则为什么会有非零内容长度

如果客户端验证失败,我将得到一个带有空字段的$\ POST。照现在的情况,我根本就没有田地。完全困惑

有什么想法吗

更新:客户端请求提交代码如下所示:

var r = trim((re = document.getElementById("tread")).value),
    m = trim((me = document.getElementById("tmean")).value);
if(r == "" && m == "")
    alert("Please provide.");
else
{
    $.post(URLPrefix + "tsearch.php", {R : r, M : m, Src:"bytext"}, DoneSearch, "html");
}
还有另一个对同一服务器端脚本的请求,如下所示:

$.post(URLPrefix + "tsearch.php", {K0 : KCode(0),
    K1 : KCode(1), K2 : KCode(2), K3 : KCode(3),
    P : document.getElementById("pos").checked ? 1 : 0,
    Src:"bykanji"}, DoneSearch, "html");

我看不出这段代码(所有字段都是无条件的)如何提供空的POST集合。

如果您在客户端使用jQuery/Javascript进行验证,关闭脚本的客户端将不会命中您的验证代码。如果您想对此进行测试,可以使用一个额外的隐藏字段,并在表单中使用JS将其设置为一个值

e、 在你的表格中,有

<input  type="hidden" value="False, JS is off" name="my-hidden-field" />    

您可以使用它来查看空帖子是否是验证代码未能在客户端运行的结果。

我真诚地建议同时进行客户端和服务器端验证。使用PHP检查$\u POST[]数组中的空/空输入非常简单。您的JavaScript应该捕获空输入,不允许请求,但万一有人路过您的JS,您应该始终在服务器上进行双重检查。简单到:

if(empty($_POST['val']))
 // throw error

这样就可以很好地工作,您可以从该点停止所有处理,也可以按自己喜欢的方式处理它。如果数据验证很重要,我真的认为它应该在服务器上完成,JavaScript或任何严格的客户端操作都太容易修改。

jQuery post从脚本开始调用。没有表单/操作/方法组合作为备份。因此,如果客户端上的脚本已关闭,则任何东西都无法工作。此外,在我的日志中,我还可以看到一系列显然来自同一用户的请求——相同的IP,在几分钟内就彼此发生了,除了一个带有$u POST变量的请求外,其他所有请求看起来都是正确的。
if(empty($_POST['val']))
 // throw error