1

我对 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
    });

});
4

5 回答 5

0

这是我之前的回答加上评论的结论,但我仍然不确定你是否可以在数组中刺痛数组..

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+= ' }';
于 2013-05-10T11:33:08.283 回答
0

我建议首先执行以下操作:

var submit_basic = $.post('index.php/submit_data/pass_basic_data', get_experience_data());
于 2013-05-10T10:19:05.373 回答
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);

如果您只是在末尾添加一个值,则无需每次都创建一个新数组。

于 2013-05-10T10:19:12.827 回答
0

您需要执行get_experience_data方法,否则您传递的函数不执行它

于 2013-05-10T10:20:17.643 回答
0

尝试对实际的 jquery 进行故障排除,而不是 php 部分。但这里有一个建议:

var post_vars = get_experience_data();
var submit_basic = $.post( 'index.php/submit_data/pass_basic_data', post_vars );
于 2013-05-10T10:31:57.303 回答