【问题标题】:AJAX cannot pass multiple data to PHPAJAX 无法将多个数据传递给 PHP
【发布时间】:2014-05-06 06:45:13
【问题描述】:

在下面的代码中,输入 1、2、3 是引导输入字段,文件是 'processor.php' 本身。

<script>
   $('#create1').click(function(e) {
      var ip1 = $('#input1').val();
      var ip2 = $('#input2').val();
      var ip3 = $('#input3').val();

      $.ajax({
          url  : 'processor.php',
          type : 'POST',
          data : {
            obj1 : ip1,
            obj2 : ip2,
            obj3 : ip3
          }
      });
   });
<script>

稍后,在文件末尾,我有以下 PHP 代码

<?php 
if(isset($_POST['obj1']) {
  echo $_POST['obj1'];
  echo $_POST['obj2'];
  echo $_POST['obj3'];
}
?>

但是,它只显示 ip1 的内容并让我得到 obj2、obj3 的错误,如下所示:注意:未定义索引 'obj2' on: ...

谁能告诉我发生这种情况的原因以及如何解决这个问题。我是新手

【问题讨论】:

  • 尝试在 js 代码中提醒你的值
  • 你控制过ip1和ip3的值吗?
  • 您在if(isset($_POST['obj1']).. 中也缺少一个右括号。
  • 您只是在检查 obj1 的 isset 是否应该单独检查所有 obj2、obj3
  • 感谢您的所有 cmets。我检查了 ip2 和 ip3 的值,并确保它们不为空。也许这是我的 PHP if 语句有问题。我再查一下

标签: php jquery ajax twitter-bootstrap


【解决方案1】:
 Try this...

 <script>
  $('#create1').click(function(e) {
  var ip1 = $('#input1').val();
  var ip2 = $('#input2').val();
  var ip3 = $('#input3').val();
  var dataString = "obj1="+ip1+"&obj2="+ip2+"&obj3="+ip3; 
  $.ajax({
      url  : 'processor.php',
      type : 'POST',
      data : dataString
  });
 });
 <script>

【讨论】:

    【解决方案2】:
        <?php
            $obj1    = (isset($_POST['obj1'])    ? $_POST['obj1']    : '');
            $obj2   = (isset($_POST['obj2'])   ? $_POST['obj2']   : '');
            $obj3 = (isset($_POST['obj3']) ? $_POST['obj3'] : '');
           echo $obj1;
           echo $obj2;
           echo $obj3;
        ?>
    

    【讨论】:

      【解决方案3】:

      您只检查是否设置了$_POST['obj1']。不是其他的,所以如果它们是空的,你可能会收到失败通知。

      您收到的错误 注意:未定义的索引 'obj2' on: ... 这意味着它尝试访问的数组的索引不存在。换句话说,$_POST['obj2'] 没有赋值给它。

      在尝试使用它之前,您需要单独检查每个变量。

      $object1 = ""; // Set a default value
      if(isset($_POST['obj1']))
      {
        $object1 = $_POST['obj1']; // Assign the $_POST value if one exists
      }
      
      // Now repeat for the rest
      $object2 = ""; // Set a default value
      if(isset($_POST['obj2']))
      {
        $object2 = $_POST['obj2']; // Assign the $_POST value if one exists
      }
      
      $object3 = ""; // Set a default value
      if(isset($_POST['obj3']))
      {
        $object3 = $_POST['obj3']; // Assign the $_POST value if one exists
      }
      
      // Now $object1 will either have the default value, or the $_POST value if one exists
      echo $object1;
      echo $object2;
      echo $object3;
      

      注意:为了调试,您可以使用var_dump(); 来查看页面上变量的内容。

      var_dump($_POST);
      

      这有助于确认值/数组/对象包含您期望的内容。

      【讨论】:

      • 感谢您检查每个 obj 的想法。我还没有考虑过。我很傻
      【解决方案4】:
      <script>
         $('#create1').click(function(e) {
            var ip1 = $('#input1').val();
            var ip2 = $('#input2').val();
            var ip3 = $('#input3').val();
      
            $.ajax({
                url  : 'processor.php',
                type : 'POST',
                data : {obj1="+ip1+"&obj2="+ip2+"&obj3="+ip3}
            });
         });
      <script>
      

      或者如果这不起作用 将数据作为一个字符串发送,然后在 php 中将其分隔

       data : {obj1="+ip1+"%%"+ip2+"%%"+ip3}
      

      “%%”是分隔符

      希望对你有帮助

      【讨论】:

        【解决方案5】:
        <script>
          $('#create1').click(function(e) {
          var ip1 = $('#input1').val();
          var ip2 = $('#input2').val();
          var ip3 = $('#input3').val();
        
          $.ajax({
              url  : 'processor.php',
              type : 'GET',
                  data : {
                    'obj1' : ip1,
                    'obj2' : ip2,
                    'obj3' : ip3
                  }
              });
           });
        </script>
        
        <?php
        if (!empty($_GET['obj1']))
        {
         echo $_GET['obj1'];
        }
        ...
        ?>
        

        介意您让我们知道哪个文件显示了通知错误吗?

        【讨论】:

          【解决方案6】:
           $('#create1parentcontainer').on("click","#create1",function(e) {
                var ip1 = $('#input1').val();
                var ip2 = $('#input2').val();
                var ip3 = $('#input3').val();
          
                $.ajax({
                    url  : 'processor.php',
                    type : 'POST',
                    data : {
                      "obj1" : ip1, //passing key set in ""
                      "obj2" : ip2,
                      "obj3" : ip3
                    }
                });
             });
          

          在php中设置如下代码

          <?php
                  $obj1    = (isset($_POST['obj1'])    ? $_POST['obj1']    : '');
                  $obj2   = (isset($_POST['obj2'])   ? $_POST['obj2']   : '');
                  $obj3 = (isset($_POST['obj3']) ? $_POST['obj3'] : '');
                 echo $obj1;
                 echo $obj2;
                 echo $obj3;
              ?>
          

          并在控制台中查看您在 ajax 请求中发送的确认内容可能是控制台中显示的错误

          【讨论】:

          • 您的解决方案似乎是正确的。但是,还有一个问题是,当我加载页面时,因为“#create1”还没有被点击,所以所有的obj都会是''
          • 然后在此单击操作绑定中使用 like 在 create1 的第一个父容器上设置
          猜你喜欢
          • 1970-01-01
          • 2012-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-24
          • 1970-01-01
          • 2011-07-09
          相关资源
          最近更新 更多