我在检查form element SELECTserver PHP code时遇到问题。

我在这里找到了一个相似的link,但在讨论中略有不同。
我的HTML代码是

<body>
<div id="header">
<h1>Please add your landed property to advertise</h1>
</div>

<div id="background">
<form name="advertiseForm"  id="advertiseForm" method="post" >


<br /><br /><br />
<select name="stories"  id="stories"  required="required"/>
     <option value="Stories" >Number of stories</option>
     <option value="1">1</option>
     <option value="2">2</option>
     <option value="3">3</option>
     <option value="4">4</option>
     <option value="morethan4">More than 4</option>
<select/>
<label for="stories">Please select for number of stories</label>
<div  id="stories-error" class="error-box" style="color:#FF0000"></div>

<br /><br /><br />
<select name="bedrooms" id="bedrooms" required="required"/>
     <option value="Bedrooms" >Number of bedrooms</option>
     <option value="1">1</option>
     <option value="2">2</option>
     <option value="3">3</option>
     <option value="4">4</option>
     <option value="5">5</option>
<select/>
<label for="numbedrooms">Please select for number of bedrooms</label>
<div  id="bedrooms-error" class="error-box" style="color:#FF0000"></div>
</form>
</body>


我已经使用two SELECT elements at my form使用AJAX将form elementsdata: $("form").serialize(),发送到服务器。

</body>
<script>
function sendtoServer() {
     $.ajax({
        url: "advertisementdatavalidationatserver.php",
        type: "POST",
        data: $("form").serialize(),
        success:  function(ret){
            alert(ret.message);
            if(ret.error == true){

              if(ret.message.indexOf("Storieserror")>=0){
                  $('#stories-error').css('display', 'block');
                  $('#stories-error').html('Please enter number of stories at your building');
              }else{
                  $('#stories-error').html('');
              }

              if(ret.message.indexOf("Bedroomserror")>=0){
                  $('#bedrooms-error').css('display', 'block');
                  $('#bedrooms-error').html('Please enter number of bedrooms at your building');
              }else{
                  $('#bedrooms-error').html('');
              }
         }else{

              $('#stories-error').html('');
              $('#bedrooms-error').html('');

           }
        },
        error: function(){
           // the AJAX request failed as in timed out / bad url etc.
        }
   });
}
</script>
</html>


我在服务器端进行验证的PHP代码是

<?php
$data = array();
$data['error'] = false;

if ($_SERVER["REQUEST_METHOD"] == "POST") {

        if ($_POST['stories'] == "Stories"){
            $data['error'] = true;
            $data['message'][] = "Storieserror";
        }

        if ($_POST['bedrooms'] == "Bedrooms"){
            $data['error'] = true;
            $data['message'][] = "Bedroomserror";
        }

}

// then echo the $data array you have built as JSON to use in jquery.
//This will be what is returned in your AJAX request
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($data);
?>


这里的问题是SELECT for bedrooms,无论我如何更改option values to 1,2,3,4,..,,服务器端总是以Bedroomserror的形式返回,这意味着无论我如何更改其他option values, client side always send 'Bedrooms' value to server.
Stories is working fine
可能是什么问题呢?

编辑:
现在我发现了问题。我看到序列化的数据为

alert($("form").serialize());


附件中显示了序列化的数据,有趣的是有重复的数据(带下划线)。第一个是stories=3&bedrooms=2&bathrooms=2。然后还有一个重复的消息,bedrooms=Bedrooms&bathroom=Bathrooms,我认为我的PHP代码捕获了第二个消息,并且该值从未更改。
javascript - 如何使用AJAX将SELECT元素发送到服务器-LMLPHP

最佳答案

在此处重新创建代码进行测试时,我没有遇到您描述的问题。为bedrooms选择编号选项不会显示错误,并且返回的值正确。

要解决此类问题,建议采取以下措施:


确保由sendToServer javascript函数序列化的值是您期望的值。通过console.log()或类似的方式输出它们,以检查您在表单中选择的内容实际上已发送到PHP脚本。


我必须对您提供的代码进行一些更改才能使其正常运行。我在这里的假设是您已经具备了此功能,但是您的问题中并未包含此功能,因此我引用了我在下面所做的更改,因为它们是使测试正常进行所必需的:


将有效的DOCTYPE和head标记添加到HTML标记中
input按钮添加到表单以进行提交
添加一个script标记,该标记可插入jQuery
sendToServer调用中将对$(document).ready(function(){});函数的调用包装起来,由click提交元素上的input事件触发(或者您提交表单)
[可选]我在您的else语句后检查了if值后添加了$_POST['bedrooms']部分,以便可以检查选择的值是什么


希望这可以帮助。

09-19 09:56