Jquery验证插件不发送POST数据

时间:2014-06-05 22:55:05

标签: javascript php ajax forms jquery-validate

更新2:我发现了什么问题! .htaccess文件中有301重定向。一旦我被允许,我会将其作为答案发布(10名以下的用户必须等待8小时)。


更新:我已经采纳了Barmar的建议并检查了网络标签(我不太熟悉的标签),并注意到我从handle.php收到301查看屏幕截图。我将进行一些搜索并发布我的结果。

enter image description here


原帖:我正在使用JQuery validation plugin通过ajax验证和发送表单数据。问题不在于数据是否正在发送,但表单处理程序表示$ _POST数组中没有元素。我测试了一些不同的方法来发送ajax,数据发送,但表单处理程序没有看到任何$ _POST []值。

注意:我必须使用JQuery验证插件,因此必须由.validate.submitHandler()处理。任何$(form).on()都不够。

html + js(index.php)

<form action="handle.php" class="sky-form sky-form-modal" id="sky-form-modal" method=
"post" name="sky-form-modal">
  <label class="input">
  <input name="name" placeholder="Name" type=
  "text">
  </label>
  <label class="input"><input name="company" placeholder="Company" type=
   "text">  
  </label>

  <footer>
      <button class="button" type="submit">Send request</button>
      <div class="progress"></div>
  </footer>
</form>

<script>
$("#sky-form-modal").validate({
  submitHandler: function(form) {    
    var $form = $("#sky-form-modal"); //being explicit for testing
    var $inputs = $form.find("input, select, button, textarea");
    var serializedData = $form.serialize();

    request = $.ajax({
      url: "handle.php",
      type: "POST",
      data: serializedData
    });

    console.log('data: ' + serializedData);
    request.done(function(response, textStatus, jqXHR) {
      console.log("Response: " + response);
     });
   },
});
</script>

handle.php:

<?php
    if(isset($_POST['name'])) {
        echo 'we got it';
    } else {
        echo 'name not set';
    }
?>

好的,所以看起来一切正常,请在填写用户名并将公司留空后查看console.log:

data: name=testtest&company=
Response: name not set

正如您所看到的,序列化工作并获取所有信息,但是当由handle.php处理时,它告诉我$_POST[]为空。在handle.php上循环使用它证明了这一点:

 foreach($_POST as $key=>$value) { 
   echo "$key: $value 
   \n"; 
}

根本没有返回。 我也尝试了ajaxSubmit()form.submit(),但我得到了相同的结果。

这个对我来说是正确的,因为我搜索并搜索了stackoverflow,并且发现大多数问题包括输入标记上的'name'属性,已经完成了。

提前致谢!!

3 个答案:

答案 0 :(得分:2)

我的问题与我的代码无关,结束了 .htaccess 中的一些声明。它将我从.php文件重定向到目录(对于更漂亮的URL)。现在,这是一种常见的技术:

如果您正在处理其他人的项目且您的网址没有标准的文件扩展名,请检查.htaccess!

答案 1 :(得分:-1)

Page.html或.php

<form action="/" id="sky-form-modal" method=
"post" name="sky-form-modal">
  <input name="name" placeholder="Name" type="text">
  <input name="company" placeholder="Company" type="text">  
  <button class="button" type="submit">Send request</button>
</form>

<div id="result"></div>

<script>
var request;

$("#sky-form-modal").submit(function(event){
    // abort any pending request
    if (request) {
        request.abort();
    }
    var $form = $(this);
    var $inputs = $form.find("input, input");
    // serialize the data in the form
    var serializedData = $form.serialize();

    // let's disable the inputs for the duration of the ajax request
    // Note: we disable elements AFTER the form data has been serialized.
    // Disabled form elements will not be serialized.
    $inputs.prop("disabled", true);

    // fire off the request to /form.php
    request = $.ajax({
        url: "handle.php",
        type: "post",
        data: serializedData
    });

    // callback handler that will be called on success
    request.done(function (response, textStatus, jqXHR){
        // log a message to the console
        console.log("Hooray, it worked!");
        $("#result").html(response);
    });

    // callback handler that will be called on failure
    request.fail(function (jqXHR, textStatus, errorThrown){
        // log the error to the console
        console.error(
            "The following error occured: "+
            textStatus, errorThrown
        );
    });

    // callback handler that will be called regardless
    // if the request failed or succeeded
    request.always(function () {
        // reenable the inputs
        $inputs.prop("disabled", false);
    });

    // prevent default posting of form
    event.preventDefault();
});
</script>

handle.php

<?php

foreach ($_POST as $key => $value) {
        echo "POST Key: '$key', Value: '$value'<br>";
    }

?>

我删除了您的标签和类,以获得表单的简单外观。

答案 2 :(得分:-1)

我猜你错过了&#39;(&#39;验证后     $(&#34;#sky-form-modal&#34;)。validate {     $(&#34;#sky-form-modal&#34;)。验证({