我是JavaScript和PHP的新手,它是第一次遇到并使用JSON。我认为我的AJAX请求很好,但即便如此,$_POST
数组也是空的。
以下是AJAX调用:
$( "#submit" ).click( function() {
var submit_basic = $.post( 'index.php/submit_data/pass_basic_data',
get_experience_data()
);
submit_basic.done( function(data) {
alert(data); // for debugging purposes
});
});
这是从表中获取数据的函数:
function get_experience_data() {
var temp, data_exp = [];
$( "#exptable tbody tr" ).each( function() {
temp = {
company: $(this).find('td').eq(0).html(),
position: $(this).find('td').eq(1).html(),
datestart: $(this).find('td').eq(2).html(),
dateend: $(this).find('td').eq(3).html(),
description: $(this).find('td').eq(4).html()
};
data_exp = data_exp.concat(temp);
});
return data_exp;
}
作为参考,仅打印$_POST
数组的目标控制器函数(通过我使用CodeIgniter的方式):
public function pass_basic_data() {
var_dump($_POST);
}
你能否指出我所犯的错误,因为我找不到它。非常感谢!
更新:我特别收到此消息:
array(1) {
["undefined"] =>
string(0) ""
}
更新
感谢所有帮助人员!我已经解决了。它让我在房间里四处跳舞。
我将返回值包装在{name : value}
对中。
$( "#submit" ).click( function() {
var post_vars = get_experience_data();
var submit_basic = $.post( 'index.php/submit_data/pass_basic_data',
{object: post_vars}
);
submit_basic.done( function(data) {
alert(data); // for debugging purposes
});
});
答案 0 :(得分:0)
我建议您开始以下操作:
var submit_basic = $.post('index.php/submit_data/pass_basic_data', get_experience_data());
答案 1 :(得分:0)
试试这个:
var submit_basic = $.post('index.php/submit_data/pass_basic_data', get_experience_data());
// you need to add parentheses here --------------------------------------------------^
当您将函数传递给$.post()
时,它假定它是在收到响应后要调用的回调。你想要做的是调用函数并将它的返回值传递给$.post()
。
顺便说一句,这一行:
data_exp = data_exp.concat(temp);
可以替换为:
data_exp.push(temp);
如果您只是在最后添加一个值,则无需每次都创建一个新数组。
答案 2 :(得分:0)
你需要执行方法get_experience_data,否则你传递的函数没有执行它
答案 3 :(得分:0)
尝试排除实际的jquery,而不是php部分。 但是有一个建议:
var post_vars = get_experience_data();
var submit_basic = $.post( 'index.php/submit_data/pass_basic_data', post_vars );
答案 4 :(得分:0)
这是我之前的答案加上评论的结论,但我仍然不确定你是否可以在数组中对数组进行sting化..
var submit_basic = $.ajax({
type: "POST",
url: 'index.php/submit_data/pass_basic_data',
dataType: 'json',
async: false,
data: JSON.stringify(get_experience_data()),
success: function (response) {
alert(response);
}
});
<强>更新强> 根据此jsfiddle脚本修改您的get_experience_data函数
像这样:temp = '{ ';
temp+= '"company":"' +$(this).find('td').eq(0).html()+ '", ';
temp+= '"position":"' +$(this).find('td').eq(1).html()+ '", ';
temp+= '"datestart":"' +$(this).find('td').eq(2).html()+ '", ';
temp+= '"dateend":"' +$(this).find('td').eq(3).html()+ '", ';
temp+= '"description":"' +$(this).find('td').eq(4).html()+ '"';
temp+= ' }';