javascript - 通过 Ajax 向 PHP 后端提交表单返回错误

标签 javascript php jquery html ajax

我正在构建一个表单,要求用户提供姓名地址金额1金额2和一条评论

amount1 和 amount2 的单选数值不同。

当我提交表单时,我的变量 $rate_error 返回 “您必须输入评级评论”;,即使它不为空。

我的 radio 输入可能有问题吗?

我对 amount1 变量的赋值是否错误?

当用户选择不同的金额时,我需要更改变量的值。

HTML

 <form id='main-rate' method="POST">
     <input type="search" name="address" id="geocomplete"  placeholder="Type in an address"/>
     <input type="text"  name='landlord_name id="name" '/>

     <input type="radio" name="amount1" id="amount1" value="2">
     <label for"amount1">2<label>
     <input type="radio" name="amount1" id="amount1" value="4">
     <label for"amount1">4<label>
     <input type="radio" name="amount1" id="amount1" value="6">
     <label for"amount1">6<label>
     <input type="radio" name="amount1" id="amount1" value="8">
     <label for"amount1">8<label>
     <input type="radio" name="amount1" id="amount1" value="10">
     <label for"amount1">10<label>

     <input type="radio" name="amount2" id="amount2" value="2">
     <label for"amount2">2<label>
     <input type="radio" name="amount2" id="amount2" value="4">
     <label for"amount2">4<label>
     <input type="radio" name="amount2" id="amount2" value="6">
     <label for"amount2">6<label>
     <input type="radio" name="amount2" id="amount2" value="8">
     <label for"amount2">8<label>
     <input type="radio" name="amount2" id="amount2" value="10">
     <label for"amount2">10<label>

     <textarea  id="comment" name="comment" required="required">
     </textarea>
     <button type='submit'>Submit</button>
 </form>

JavaScript

$(document).ready(function()
{

    $("#main-rate").submit(function()
    {


        var address = $('#geocomplete').val();
        var name = $("#name").val();
        var comment = $('#comment').val();  

     var amount1 = document.getElementsByName('amount1');
       for (var i = amount1.length; i--;) {
           amount1[i].onchange = function() {

                 amount1 = this.value;
                 console.log(amount1);
             }
         }
    var amount2 = document.getElementsByName('amount2');
       for (var i = amount2.length; i--;) {
           amount2[i].onchange = function() {

                 amount1 = this.value;
                 console.log(amount2);
             }
         }




        var dataString =  name  + address  + amount1 +  amount2 +  comment;

        if (name == '' || address == '' || amount1 == '' || amount2 == '' || comment == '')
        {
            console.log("Please Fill All Fields");
        } else
        {
            // AJAX Code To Submit Form.
            $.ajax({
                type: "POST",
                url: "path/to/url",
                data: dataString,
                cache: false,
                success: function(result)
                {
                   console.log(result);

                    $('rate-section').html(
                        '<div><h1>THANKS FOR RATING!</h1></div>'
                     );


                    return false;


                }
            });
        }
        return false;
    });
});

PHP

 $rate_error = 0;

 if (isset($comment) && $comment != '') {


        if (!$address_id && !$address) {
            $rate_error = "must enter an address";
        }

        //if not logged in and creating new user
        if (!$SESSION->logged_in()) {
            $User = new USER();

            $rate_error = $User->createUser($username_entered, $email_entered, $pass_1, $pass_2, $fb_user, $g_user, $g_token, 1);
        }
        if (!$rate_error && !$SESSION->user_id()) {
            $rate_error = "error - you must create an account before rating a landlord";
        }


        if (!$comment) {
            $rate_error = "you cannot leave a blank review";
        }
        if (!$landlord_id && !$landlord_name) {
            $rate_error = "you must enter a landlord name";
        }
    } else {
        $rate_error = "you must enter a rating comment";
    }

 if (($landlord_name || $landlord_id) && $rate_error==0) {

  //query to database

  $success = 1;

 }

if ($success){
        $resultArray = array("success"=>1);
        $resultArray['landlord'] = $current_landlord;
    } else {
        $resultArray = array("success"=>0,
            "rate_error"=>$rate_error);
    }

更新

对我的 JavaScript 进行了一些更改,但现在收到 500 内部错误。

    $("#main-rate").submit(function()
        {
             var address = $('#geocomplete').val();
             var name = $("input[name='landlord_name']").val();
             var amount1 = $("input[name='amount1']").val();
             var amount2 = $("input[name='amount2']").val();         
             var amount3 = $("input[name='amount3']").val();         
             var amount4 = $("input[name='amount4']").val();
             var amount5 = $("input[name='amount5']").val();
             var amount6 = $("input[name='amount6']").val();
             var amount7 = $("input[name='amount7']").val();
             var comment = $('#comment').val();                                

             var dataString = {
             name: name,
             address: address,
             amount1: amount1,
             amount2: amount2,
             amount3: amount3,
             amount4: amount4,
             amount5: amount5,
             amount6: amount6,
             amount7: amount7,
             comment: comment

            }


            if (dataString.name == '' || dataString.address == '' || dataString.amount1 == '' || dataString.amount2 == '' || dataString.amount3 == '' || dataString.amount4 == '' || dataString.amount5 == '' || dataString.amount6 == '' || dataString.amount7 == '' || dataString.comment == '')
            {
                console.log("Please Fill All Fields");
            }  else
        {
            // AJAX Code To Submit Form.
            $.ajax({
                type: "POST",
                url: "path/to/url",
                data: dataString,
                cache: false,
                success: function(result)
                {
                   console.log(result);

                    $('rate-section').html(
                        '<div><h1>THANKS FOR RATING!</h1></div>'
                     );


                    return false;


                }
            });
        }
        return false;
    });
});

最佳答案

正如@ShaunakD 指出的,您没有正确地将数据发送到服务器。如果您的所有输入都填写了字母“a”,它仍然会提交,但 PHP 会收到“aaaaa”(好吧,不是技术上的,考虑到下面的单选和 amount1&2 赋值问题),没有任何指示正在传递哪些变量。

我建议他的第一种方法将您的 dataString 分配行更改为:

 var dataString = {
   name: name,
   address: address,
   amount1: amount1,
   amount2: amount2,
   comment: comment
 };

您当前的实现在检索 amount1 和 amount2 的值时会出现问题。您正在为提交函数中的 onchange 分配事件。您应该首先删除每个 radio 输入的 id 属性,并将它们的值分配(更简单)替换为:

 var amount1 = $("input[name='amount1']").val();
 var amount2 = $("input[name='amount2']").val();

编辑:为下面我的第一条评论提供更多背景信息:

 $("#main-rate").submit(function()
 {


    var address = $('#geocomplete').val();
    var name = $("#name").val();
    var comment = $('#comment').val();  
    var amount1 = $('input[name="amount1"]').val();
    var amount2 = $('input[name="amount2"]').val();

   //Remove this entirely
   /*
   var amount1 = document.getElementsByName('amount1');
   for (var i = amount1.length; i--;) {
       amount1[i].onchange = function() {

             amount1 = this.value;
             console.log(amount1);
         }
     }
   var amount2 = document.getElementsByName('amount2');
   for (var i = amount2.length; i--;) {
       amount2[i].onchange = function() {

             amount1 = this.value;
             console.log(amount2);
         }
   }
   */

祝你好运!

关于javascript - 通过 Ajax 向 PHP 后端提交表单返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30106122/

相关文章:

javascript - 降低矩阵排序的运行时复杂性

jquery - 如何终止 DataTables 中之前的 AJAX 调用

javascript - 自动完成不起作用

javascript - 如何在javascript中获取动态创建的标签元素的id

javascript - 访问函数范围之外的变量但不使其成为全局变量(window.hazaa)?

javascript:警报在任何浏览器中都不起作用,为什么

javascript无法使用xul的oncommand?

javascript - CRM 2015 中自定义实体表单上的 OnSave 事件进入递归触发器

php - pdo mysql 数据检索

php - date_default_timezone_set 不起作用,为什么?