【问题标题】:how to pass array from html to php using ajax如何使用ajax将数组从html传递到php
【发布时间】:2012-06-09 05:42:34
【问题描述】:

我尝试通过 ajax 使用 jquery 传递数组并返回,但我的代码无法正常工作。 我一直在改变它,但它不起作用。 请告知该怎么做。 我认为我的 jquery 代码还可以,但 php 代码不能重播。 谢谢。

html 代码。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1255">
<script type="text/javascript" src="http://ajax.googleapis.com/
ajax/libs/jquery/1.5/jquery.min.js"></script>

<script type="text/javascript" >
$(document).ready(function(){
    var allVals = { 
              'a': '1', 
              'b': '2',
              'c': '3' 
            }; 
            //$.each(allVals, function(key, value) { 
              //alert(key + ': ' + value); 
                //  });
            });
$.ajax({
    type: "POST",
     dataType: 'html',
     url: "test4.php",
     data: 'allVals=' + allVals,
         cache: false,
         success: function(data)
         {
            alert(data);
            $('#test').html(data);
            }
         });
</script>

<title>Insert title here</title>
</head>
<body>
<div id="test">##</div>
</body>
</html>

php代码test4.php

<?php
    $allVals = $_POST['allVals'];
    if ($allVals != ""){
          foreach ($allVals as $key => $value) {
          echo ($key.' '.$value."<br />");
    }     }

?>

【问题讨论】:

  • 您收到成功警报了吗?乍一看,一切都很好。
  • 把$.ajax代码放到ready函数里面
  • 尝试制作一个 json-Array 并发送它
  • 你为什么会有这个data: 'allVals=' + allVals,
  • 我应该写什么 instad data: 'allVals=' + allVals, 你提供什么?

标签: php jquery ajax arrays


【解决方案1】:

你也可以像这样从 jQuery 向 PHP 发送一个数组。在您的示例中,您发送一个对象:

<?php 
if($_SERVER['REQUEST_METHOD']=='POST'){
    header('Content-Type: text/html');
    print_r($_POST['allVals']);
    /*
    Array ( [0] => 1 [1] => 2 [2] => 3 ) 
    */
    die;
}
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function() {

    var myJavascriptArray = new Array('1', '2', '3');
    //or var myJavascriptArray=["1","2","3"]; 

    $.ajax({
        type: "POST",
        dataType: 'html',
        url: "test.php",
        data: {'allVals[]=' : myJavascriptArray},
        cache: false,
        success: function(data){
            $('#test').html(data);
        }
    });

});
</script>

</head>

<body>
<div id="test"></div>
</body>
</html>

【讨论】:

    【解决方案2】:

    您正在 $(document).ready(...-scope 之外进行 $.ajax 调用。将它移到里面!

    我会做这部分

    data: 'allVals=' + allVals
    

    像这样:

    data: allVals
    

    如果你想像在php中那样接收它,将其更改为:

    data: {"allVals": allVals}
    

    希望我的语法正确.. ;)

    【讨论】:

    • 我认为data: 'allVals=' + allVals, 等于data: {"allVals": allVals}
    • yossi,你在 $(document).ready(...-scope 把它移到里面!
    • 你说得对,我确实弄错了 $.ajax-call outside 。但它仍然无法正常工作
    • yoss,data: 'allVals=' + allVals 产生 [allVals] =&gt; [object Object]
    【解决方案3】:
    data: 'allVals=' + allVals,
    

    这是罪魁祸首,发送的是allvals[object Object]

    【讨论】:

    • 您将 object allvals 视为带有 'allVals=' + allVals 的字符串,因此 allVals 被转换为 [object Object] 所以 'allVals=' + allValsallvals[object Object]
    • 通过将data: "allVals=" + allVals, 更改为data: "allVals[]=" + allVals, 并更改&lt;?php $allVals = $_POST['allVals']; if ($allVals != ""){ foreach ($allVals as $key =&gt; $value) { echo ($key.' '.$value."&lt;br /&gt;"); } } ?&gt; 我得到了成功,但输出是Array ( [0] =&gt; [object Object] ) 这意味着数组发送为空?
    【解决方案4】:

    如果你需要一个 php 数组,我建议你这样做:

    data: {allVals : allVals}

    $_POST['allVals'] 将包含一个数组。

    否则,如果您只需要单个参数,则必须执行以下操作:

    var stringToSend = sep = "";
    $.each(allVals, function(key, value) { 
        stringToSend += sep+key+"="+value;
        sep = "&";          
    });
    $.ajax({
    type: "POST",
     dataType: 'html',
     url: "test4.php",
     data: stringToSend,
     ...
    

    【讨论】:

      【解决方案5】:

      你最好使用 jQuery $.POST 方法:

      var javascriptArray = new Array('a', 'b', 'c');
      
      $.post('url_to_test4.php', {'allVals[]': javascriptArray }, function(data){
         // perform some action with the response data.
      });
      

      这将向 PHP 文件发送一个名为 allVals 的数组,其中包含您的 javascriptArray 的内容。

      【讨论】:

        猜你喜欢
        • 2023-03-13
        • 1970-01-01
        • 2015-09-09
        • 2014-01-09
        • 1970-01-01
        • 1970-01-01
        • 2018-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多