正如标题所说,我无法通过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传递数据的不同方法。
答案 0 :(得分:1)
如果array
仅not 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');