用php数组提交

时间:2011-10-31 00:46:24

标签: php jquery ajax

此代码的目标是,当用户点击修改按钮时,会将此all=<?php echo $arr; ?>发送到页面edit.php

这段代码什么都不做(在firebug中没有ajax调用)。

<?php 
$arr = array("one", "two", "three")
?>
    <div id="content">
    <input class="edit" type="submit" value="Edit" /> 
    </div>

    <script type="text/javascript">
    $(document).ready(function () {
        $(".edit").submit(function () {
            $.ajax({
                url: "edit.php",
                type: "post",
                dataType: "html",
                data: "<?php echo json_encode( $arr ); ?>",
                success: function (data) {
                    $('#ad').html(data);
                }
            });
        });
    });

    </script>

6 个答案:

答案 0 :(得分:2)

编辑正如@MilanJaric所示,您需要操作提交按钮的click。但是,您还应该阻止点击的默认操作。 结束修改

您需要回显json_encoded并用引号括起来的数据:     

<div id="content">
  <input class="edit" type="submit" value="Edit" /> 
</div>

<script type="text/javascript">
  $( function()
  {
    $( '.edit' ).click( function( e )
    {
      $.ajax( {
        url: 'edit.php;,
        type: 'post',
        dataType: 'html',
        data: '<?php echo json_encode( $arr ); ?>',
        /* It's hard to tell based on your code, but if you wanted a var at the server named "all" use this instead of the above line:
        data: {
          all: '<?php echo json_encode( $arr ); ?>'
        },
        */
        success: function( data )
        {
          $( '#ad' ).html( data );
        }
      } );

      e.preventDefault();
    } );
  } );
</script>
然而,IMO,在你的JS中回应PHP真的很难看,特别是如果你必须做很多事情,所以当需要时,我使用IIFE将PHP数据注入到代码中一个JS var。这允许我隔离IIFE调用的所有PHP回显:

<?php 
  $arr = array("one", "two", "three")
?>

<div id="content">
  <input class="edit" type="submit" value="Edit" /> 
</div>

<script type="text/javascript">
  ( function( arr )
  {
    $( function()
    {
      $( '.edit' ).click( function( e )
      {
        $.ajax( {
          url: 'edit.php;,
          type: 'post',
          dataType: 'html',
          data: arr,
          /* It's hard to tell based on your code, but if you wanted a var at the server named "all" use this instead of the above line:
          data: {
            all: arr
          },
          */
          success: function( data )
          {
            $( '#ad' ).html( data );
          }
        } );

        e.preventDefault();
      } );
    } );
  }(
    '<?php echo json_encode( $arr ); ?>'
  ) );
</script>

答案 1 :(得分:2)

除了其他人指出json_encode() $arr <input>的需要之外,jQuery documentation for .submit()指出了以下内容:

  

当用户尝试时,提交事件将发送到元素   提交表格。它只能附加到&lt; form&gt;元件。

因此,我认为甚至没有提交AJAX的原因是您的<form>元素不在<?php $arr = array("one", "two", "three"); ?> <form id="content"> <input class="edit" type="submit" value="Edit" /> </form> <script type="text/javascript"> $(document).ready(function () { $(".edit").submit(function () { $.ajax({ url: "edit.php", type: "post", dataType: "html", data: "all=<?php echo json_encode($arr); ?>", success: function (data) { $('#ad').html(data); } }); }); }); </script> 元素内。请尝试以下方法:

{{1}}

答案 2 :(得分:1)

JavaScript submit事件仅发生在<form>而非个人<input>上。

您需要以下HTML:

<div id="content">
    <form id="whatever">
        <input class="edit" type="submit" value="Edit" /> 
    </form>
</div>

在JavaScript中改变:

$( '.edit' ).submit( function()

$( '#whatever' ).submit( function()

答案 3 :(得分:0)

               

<script type="text/javascript">
$(document).ready(function () {
    $(".edit").click(function () {
        $.ajax({
            url: "edit.php",
            type: "post",
            dataType: "html",
            data: "all=<?php echo $arr; ?>",
            success: function (data) {
                $('#ad').html(data);
            }
        });
    });
});

</script>

答案 4 :(得分:0)

使用json_encode将php数组编码为json字符串 http://php.net/manual/en/function.json-encode.php

答案 5 :(得分:0)

你正在回显一个数组,这将使PHP回显像Array(),而不是真正的值。 尝试var_dump($ arr);转储数组,并最终尝试序列化数组,以后更容易检索其状态。 如果ajax调用确实可以使用静态数据,那么这就是你应该开始查看的地方。