【问题标题】:Ajax is working but the server has no responseAjax 正在工作,但服务器没有响应
【发布时间】:2021-07-30 23:46:09
【问题描述】:

所以我尝试了很多方法来解决我的网络问题。我希望在这里找到解决方案。问题是 ajax 成功函数工作,并且在网络部分它的状态代码为 200 与数据输入但它没有响应并且数据没有插入到数据库中

html 表单:

        <form action="./includes/systemcheck.inc.php" id="reg1" method="post">
            <input type="text" id="reg_fname" name="fullName" class="mr_fni">
            <input type="number" id="reg_uid" name="userID" class="mr_idi">
            <input type="number" id="reg_pnumber" name="phoneN" class="mr_pni">
            <input type="submit" name="register1" id="reg1_sub_butt" value="next" 
            class="cim_gSubmmit">
        </form>
        <p id="reg1_result"></p>

php:

   if(isset($_POST['register1'])){

   $fullName = $_POST['fullName'];
   $userID = $_POST['userID'];
   $phoneN = $_POST['phoneN'];
   if(!empty($fullName) || !empty($userID) || !empty($phoneN)){
    $sql = "INSERT INTO `hotelsystem` (`fullName`, `phoneNumber`, `id`) 
            VALUES ('$fullName', '$phoneN', '$userID')";
    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
   }
   else{
    echo "fill all fields please";
   }

ajax

window.onload = function(){
 
    $('#reg1_sub_butt').click(function (e) {
        var formData = {
            'fullName' : $('#reg_fname').val(),
            'userID': $('#reg_uid').val(),
            'phoneN': $('#reg_pnumber').val()
        }
        
        if(formData.fullName == '' || formData.userID == '' || formData.phoneN == ''){
            $('#reg1_result').html('Please fill all fields');
        } else {
            //if no issues attempt to push code
            submitData(formData);
            $('#reg1_result').show();
        }
        
        return false;
        
    });
}

function submitData(formData){
    console.log(formData);
    $.ajax({
        type: 'POST',
        url: './includes/systemcheck.inc.php',
        data: formData,
        contentType: 'charset=UTF-8',
        async: false,
        success: function(response) {
            $('#reg1_result').html(response + "work");
        },
        error: function() {
            $('#reg1_result').html('There was an error');
        }
    });
}

【问题讨论】:

  • 如果你只是做submitData($('#reg1').serialize()),它将传递该表单中的所有元素。如果你在某个时候添加一些输入,那么你也不需要更新你的 JS。
  • 你有一个严重的安全问题。您对SQL injection attacks敞开心扉!了解如何使用prepared statements with bound parameters,而不是将用户数据直接注入到您的查询中。永远不要相信没有明确硬编码到代码中的数据。
  • 如果您将代码更改为我在第一条评论中建议的内容,它应该可以工作。
  • yes its mean that when you press the button register1 it run the code inside...不完全是。这意味着当 $_POST 数据在“register1”字段中包含一个值时,它将运行该代码。 PHP 只看到 HTTP 请求中的 POST 值,它对按钮、表单或浏览器或类似的东西一无所知。所以如果你想让它看到那个变量,你必须发送它。它不会在 AJAX 请求中自动发送。
  • 其实我只是测试了一下,.serialize() 好像没有提交按钮。

标签: javascript php ajax database xmlhttprequest


【解决方案1】:

您通过 AJAX 发送的 formData 变量不包含名为 register1 的字段,因此代码不会进入第一个 if 块 (if(isset($_POST['register1']))),并且没有其他可以提供的替代输出。

您只需将其添加到formData 对象即可发送该字段。它的内容无关紧要,它只需要存在。例如:

var formData = {
    'fullName' : $('#reg_fname').val(),
    'userID': $('#reg_uid').val(),
    'phoneN': $('#reg_pnumber').val(),
    'register1': true
}

或者,您可以保留 formData 原样,让 PHP 检查一个或多个其他必填字段,例如:

if(isset($_POST['fullName'])){

附: 您应该从代码中删除 async:false,因为它已被弃用且不必要。 contentType: 'charset=UTF-8' 也无效或无用,您也可以将其删除。

而且您应该fix the SQL injection vulnerability in your mysqli code - 事实上,无论 SQL 注入如何,只要将 ' 放在其中一个输入字段中,就可能有人会破坏您的查询,因此这是解决问题的另一个好理由。

【讨论】:

  • 是不是也需要event.preventDefault();来停止表单的正常提交?
  • @RiggsFolly 验证函数末尾的return false 应该可以达到相同的效果。
  • 它对我不起作用。我接受了所有的建议,但它的钢铁和它一样的问题。 ajax成功函数运行,服务器状态码为200但无响应,数据未插入数据库。
  • @Lidor 您是否对它进行了更详细的调试,而不仅仅是“它不起作用”?它在运行时通过 PHP 代码采用什么路径 - 它是否根据需要输入所有 if 块?所有的 $_POST 变量都按照您的预期填充吗? SQL 查询命令一定会运行吗?您是否修复了 SQL 注入问题?如果您不学会分析代码并正确调试它,您将永远无法解决代码的小问题。将一些日志记录添加到您的 PHP 以帮助您做到这一点。如果您需要我们的帮助,请更新问题以显示您的代码的最新版本。
  • @ADyson 是的,我确实尝试了您的解决方案,并且代码中没有错误。就像这样按下提交按钮,事件监听工作进入 else 语句,因为我在运行从输入获取所有信息的 ajax 后填写所有字段,在网络选项卡的 devtools 中是状态码 200,所有ajax 信息,但没有响应!这就是问题
猜你喜欢
  • 2022-01-22
  • 2016-09-28
  • 2014-03-29
  • 2013-10-28
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多