jQuery AJAX发布到PHP的PDO INSERT不使用变量$(';#id';).val()


jQuery AJAX post to PHP for PDO INSERT not working with variables $('#id').val()

我展示了3个代码片段。方法1和方法2不起作用第三个代码正在工作。

*********不工作1启动**************

<script>
 $(document).ready(function() {
             $('#sending').click(function(){   
// just 4 testing:
//var txtBoxVal = $('#TextBox1').val(); 
// alert(txtBoxVal); ==> ok: showing the value I want to send & INSERT into database via PDOinsertpost.php
     $.ajax({
                type: "POST",
                url: "./PDOinsertpost.php",                                                                                         
                data: 'postVal1=' + $('#TextBox1').val(),
                success: function(msg){
                    $('#reshow').html(msg);
                }
            }); // end Ajax Call
                // now trigger a reload via the click-function:             
            window.location.reload();
           }); //end event handler .click function 
    }); //end document.ready
</script>   

*********不工作1端**************

现在使用$.ajax中的变量的方法(不太好用):

*********不工作2启动**************

<script>
 $(document).ready(function() {
             $('#sending').click(function(){   
var txtBoxVal = $('#TextBox1').val();
 // an alert - just 4 testing:
// alert(txtBoxVal); // ok: showing the value I want to send & INSERT into database via PDOinsertpost.php
     $.ajax({
                type: "POST",
                url: "./PDOinsertpost.php",                                                                                         
                data: 'postVal1=' + txtBoxVal,
                success: function(msg){
                    $('#reshow').html(msg);
                }
            }); // end Ajax Call
                // now trigger a reload via the click-function:             
            window.location.reload();
           }); //end event handler .click function 
    }); //end document.ready
</script> 

*********不工作2端**************

现在是"硬编码"的工作版本(对我来说很奇怪,这个版本正在工作,但其他版本没有…)

*********工作1启动**************

<script>
 var txtBoxVal = "some hardcoded string for testing";
 $(document).ready(function() {
             $('#sending').click(function(){   
     $.ajax({
                type: "POST",
                url: "./PDOinsertpost.php",                                                                                         
                data: 'postVal1=' + txtBoxVal,
                success: function(msg){
                    $('#reshow').html(msg);
                }
            }); // end Ajax Call
                // now trigger a reload via the click-function:             
            window.location.reload();
           }); //end event handler .click function 
    }); //end document.ready
</script> 

*********工作1端**************

其他信息:与此同时,我发现一个空值正在处理两个"不起作用"的代码片段,它们分别为$('#id').val(),这意味着:在数据库中插入一个空白值。

我找错地方了吗?我需要用PDO-INSERT在.php文件中做一些htmlenties之类的事情吗?

我希望这篇帖子能收集到一些有用的信息——对我和其他人来说都是如此。

提前感谢,-流量。

我在这里看到了两个大问题:

  1. 您正在重新加载页面(在所有示例中…),而ajax请求尚未完成。这是一种非常危险和有缺陷的方法,因为您不能确定php脚本是否会正确完成。如果以任何方式重新加载,都不需要ajax
  2. 您没有转义您的值,因此用户输入可能会破坏查询字符串。最简单的解决方案是使用对象,以便jQuery自动对其进行正确编码:
    data: { 'postVal1': $('#TextBox1').val() },

我也没有看到您取消了默认的表单提交,但在第三个示例中,我假设button/#sending元素不是提交按钮。如果没有,你也需要注意这一点。

编辑:当您使用提交按钮时,您需要阻止常规表单提交:

$('#sending').click(function(event){
   // prevent the default form submit
   event.preventDefault();
   ...  

如果没有"window.location.reload();",它似乎可以工作!@jeroen可能有正确的解释:重新装弹扰乱了比赛进程!(但它没有在我的虚拟家庭服务器上…(可能是,因为其他处理时间…))