使用jQuery ajax将JavaScript数组发送到php服务器

时间:2012-09-30 10:06:45

标签: php json jquery

这是我的jQuery代码。我在使用JSON正确格式化数据时遇到问题,请求失败。我需要做什么才能正确发送它,并能够在服务器上解码它?

$(".comment_button").click(function() {

    var chkarray = [];
    $('.webInput:checked').each(function(){
        chkarray.push($(this).val());
    });

    var dataString = "content="+ chkarray;

    if(test=='')
    {
        alert("Please check checked");
    }

    $.ajax({
        type: "POST",
        url: "chkoutput.php",
        dataType:'json',
        data: dataString,
        cache: false,
        success:
            function(html)
            {
                $("#test_area").after(html);
                document.getElementById('content').value='';
                $("#flash").hide();
            }
    });

这是服务器端代码:

$chk_out = $_POST["content"];
echo json_encode($chk_array);

3 个答案:

答案 0 :(得分:1)

var dataString=JSON.stringify(chkarray)   ;
  $.ajax({
        type: "POST",
        url: "chkoutput.php",
        dataType:'json',
        data: {"dataString":dataString},
        cache: false,
        success:
            function(html)
            {
                $("#test_area").after(html.data);
                document.getElementById('content').value='';
                $("#flash").hide();
            }

在服务器端

$chk_out = json_decode(dataString);
$data=$chk_out->data;//$data is data which you added to array or we can say
 // $chk_out["data"]

答案 1 :(得分:1)

试试这个

$.ajax({
   type: "POST",
   url: "BACKEND.php",
   timeout: 8000,
   data: "var1=" + myVar,
   dataType: "json",
   error: function(){
     $("#DIVID").html("<div class='error'>Error!</div>");
   },  
   success: function(jsonObj){
     $("#DIVID").html(jsonObj.mydata);
   }
 });


PHP Array:
$data['mydata'] = $myData;

或按照以下步骤

  1. 使用var st = JSON.stringify(your_object)对您的javascript对象(json)进行字符串化;

  2. 将您的POST数据作为“字符串”传递(可能使用jQuery:$ .post('foo.php',{data:st},function(data){...});

  3. 解码服务器端处理数据:$ data = json_decode($ _ POST ['data']);
  4. 或简单的

    var array = [1,2,3,4,5,6];
    $.ajax({
      url: "mydomain.com/url",
      type: "POST",
      dataType: "json",
      data: {arrayName: array},
      complete: function() {
        //called when complete
      },
      success: function() {
        //called when successful
      },
      error: function() {
        //called when there is an error
      },
    });
    

答案 2 :(得分:-1)

如果你想传递数组和post方法,可以尝试使用$ .post进行同步 我已经更新了你的代码。

$(".comment_button").click(function() {

        var chkarray = [];
        $('.webInput:checked').each(function(){
        chkarray.push($(this).val());
        });
       // var dataString = "content="+ chkarray;      
    if(test=='')
    {
    alert("Please check checked");

    }
        $.post('chkoutput.php',{dataString:chkarray },function(data){

                     $("#test_area").after(html);
                     document.getElementById('content').value='';
                     $("#flash").hide();
                        });
}

正如你所提到的,你不知道jquery首先检查javascript错误,在任何一个debuging工具,如mozila firebug或任何方便的东西,并发布它们,这样可以帮助更好。

为亲爱的评论员编辑

我应该承认道歉让大家感到困惑,我已经在var dataString上添加了评论,但即使没有评论,代码也会起作用。因为$ .post参数中的dataString不表示var dataString。它是全新对象的属性名称,它被传递给$ .post方法,所有其他东西都由$ .post函数管理。我真的很惊讶没有人甚至在责备之前尝试过或检查过。

如果你不同意只在php(name it index.php)文件中复制并粘贴下面的代码,这肯定会有效 然后单击按钮,看看会发生什么,然后问我它是如何工作的

<?php 
if(!empty($_POST))
{
  var_dump($_POST);exit;
}
?>
<!DOCTYPE html>
<html>
<body>

<h1>Please GET It</h1>


<script src="http://code.jquery.com/jquery-latest.min.js "></script>
<script>
function doSomething()
{   var test = ['I','am','an','array','wrong?', 'and posted as it was said on click']
    $.post('index.php',{test : test},function(data) {alert(data);})
}
</script>

<button onclick="doSomething()">Click me </button>

</body>

    </html>