如何使用ajax将数组从html传递给php

时间:2012-06-05 07:33:57

标签: php jquery ajax arrays

我尝试使用jquery通过ajax传回数组并返回,但我的代码运行不正常。 我一直在改变它,但它不起作用。 请告知该怎么做。 我认为我的jquery代码没问题,但PHP代码没有重播。 THX。

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 code test4.php

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

?>

5 个答案:

答案 0 :(得分:3)

你也可以像这样从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>

答案 1 :(得分:1)

你正在$(文件).ready(...-范围之外)进行$ .ajax调用。将其移入内部!

我会做这部分

data: 'allVals=' + allVals
像这样:

data: allVals

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

data: {"allVals": allVals}

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

答案 2 :(得分:0)

data: 'allVals=' + allVals,

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

答案 3 :(得分:0)

如果你需要一个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,
 ...

答案 4 :(得分:0)

您最好使用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的内容。