Json无法将数组传递给php

时间:2017-08-10 03:22:11

标签: php jquery json ajax codeigniter

正如标题所说,我无法通过json ajax将数据数组传递给php。我正在使用codeigniter,我做错了什么?这是jQuery代码:

 function load_page_data1(){

    var data = [];
    data['val'] = "solid_t1";
    $.ajax({   

        type: 'POST',  
        url: BASE_URL+'index.php/Chart_varnish/getdata',
        data: data,
        dataType: 'json',               
        success: function(output) {
          alert(output);
      },
      error: function(request, status, error){
        alert("Error: not working");
    }
});

}

这是php代码:

function getdata(){
$parameter = '';

if(isset($_POST))
{
  if(isset($_POST['val'])) 
  {
  $parameter = $_POST['val'];

} else
{
  echo "failed!";
}
}

$this->load->model('Chart');
$this->load->helper('url');
$data1  = $this->Chart->getdata_solid($parameter);

echo json_encode($data1);

}

最终

伙计们,事实证明这些值确实从jQuery传递到了php,问题是我愚蠢地在javascript函数中两次调用相同的php函数,然后第二次调用而不发布'val',这样php函数错误并停止。

谢谢大家的答案,至少我学习了使用jQuery传递数据的不同方法。

3 个答案:

答案 0 :(得分:1)

如果arraynot a array

,请不要make a object
var data = {};
data.val = "solid_t1";

// equivalent to 
data ={val:"solid_t1"}; 

// equivalent to 
data['val'] ="solid_t1"; 


$.ajax({   

    type: 'POST',  
    url: BASE_URL+'index.php/Chart_varnish/getdata',
    data: data,
    dataType: 'json',               
    success: function(output) {
      alert(output);
  },
  error: function(request, status, error){
    alert("Error: not working");
}
});

更新1:如果您需要发送数组,则需要制作proper array object,如下所示

示例:

var data=[];

item ={val:'value'};

data.push(item);

var  new_data = JSON.stringify(data);
 $.ajax({   

    type: 'POST',  
    url: BASE_URL+'index.php/Chart_varnish/getdata',
    data: new_data,
    dataType: 'json',               
    success: function(output) {
      alert(output);
  },
  error: function(request, status, error){
    alert("Error: not working");
}
});

进行调试:

您的服务器端代码可能有问题。所以为了测试目的,注释function中的所有行只需执行此操作echo json_encode($_POST);并在您的ajax成功函数中添加console.log(output);并让我知道结果。

答案 1 :(得分:0)

创建一个json对象

jsonObj = []; 

根据需要创建数组列表

item = {}
item ["val"] = "solid_t1";

将数组列表推送到json。

jsonObj.push(item);

请试试这样的。它适用于我的情况。

您的完整代码就像

function load_page_data1(){

    jsonObj = []; 
    item = {}
    item ["val"] = "solid_t1";
    jsonObj.push(item);

    $.ajax({   

        type: 'POST',  
        url: BASE_URL+'index.php/Chart_varnish/getdata',
        data: jsonObj,
        dataType: 'json',               
        success: function(output) {
          alert(output);
      },
      error: function(request, status, error){
        alert("Error: not working");
    }
});

}

下面给出了使用它的另一种方法。

function load_page_data1(){

    var jsonObj = {};
    jsonObj["val"] = "solid_t1"; 

    $.ajax({   

        type: 'POST',  
        url: BASE_URL+'index.php/Chart_varnish/getdata',
        data: jsonObj,
        dataType: 'json',               
        success: function(output) {
          alert(output);
      },
      error: function(request, status, error){
        alert("Error: not working");
    }
});

}

答案 2 :(得分:0)

而不是var data = [];使用var data = {};来初始化您的数据。它应该可以解决你的问题。

您的数据未作为json传递,现在它将会传递。

代码将是:

        function load_page_data1(){

            var data = {};
            data['val'] = "solid_t1";
            $.ajax({   
                type: 'POST',  
                url: BASE_URL+'index.php/welcome/getdata',
                data: data,
                dataType: 'json',               
                success: function(output) {
                  alert(output);
              },
              error: function(request, status, error){
                alert("Error: not working");
              }
            });

        }

还有一个建议请在控制器中使用CI输入库来发布请求。 e.g。

$parameter = $this->input->post('val');