如何在Ajax中发送数组并将其作为数组在PHP中获取

时间:2015-08-22 11:06:46

标签: javascript php jquery arrays ajax

我想在js中发送ajax数组,在php中作为数组获取它并插入到sql中。

我的ajax调用如下:

jQuery("#Save").click(function () {
  $(".linesView").each(function () {
    var action_name = "";
    if (window.current_category === "Expenses") {
      action_name = "Save_Expenses"
    } else if(window.current_category === "Incomes") {
      action_name = "Save_Incomes"
    }
    var line_id = $(this).attr("id").substring(5);
    var category = $("#CategoryValue_" + line_id).html();
    var date = $("#DateValue_" + line_id).html();
    var amount = $("#AmountValue_" + line_id).val();
    var repeated = $("#RepeatedValue_" + line_id).html();
    var note = $("#NoteValue_" + line_id).val();
    var data = json_encode([category,date,amount,repeated,note]);

    $.post("AjaxHandler.php", { "action_name": action_name, "data": data }, function () {
       //$("#ExpensesId_" + id).css('display', 'none');
    });
  });
});

需要获取ajax调用并添加数据的PHP代码(通过sql insert)看起来像:

if(isset($_POST['action_name','data'])) {
  $action_name = $_POST['action_name'];
  $data=json_decode($_POST['data']);
  $query = mysql_query("INSERT INTO Expenses (accountid, category, date, amount, repeated) VALUES ('$accountid', '$data[0]', '$data[1]', '$data[2]', '0')");
}

来自页面顶部的accountid,我已经删除了操作并且工作正常,因此accountid可以。所有其他人,我不知道。

我尝试编码然后解码。我不确定语法是否正确。无论如何,如果我没有写出优雅的代码,请告诉我它应该如何看待。也许我需要从数据中取出每个参数,而不是调用data[x]

2 个答案:

答案 0 :(得分:0)

使用CodeFirstDatabase

JSON.stringify()

答案 1 :(得分:0)

使用javascript中的 JSON.stringify() 将数据数组编码为JSON字符串。在服务器端使用 json_decode() 来解码数据。

<强> jQuery的:

jQuery("#Save").click(function() {
  $(".linesView").each(function() {
    var action_name = "";
    if (window.current_category === "Expenses") {
      action_name = "Save_Expenses"
    } else if (window.current_category === "Incomes") {
      action_name = "Save_Incomes"
    }
    var line_id = $(this).attr("id").substring(5);
    var category = $("#CategoryValue_" + line_id).html();
    var date = $("#DateValue_" + line_id).html();
    var amount = $("#AmountValue_" + line_id).val();
    var repeated = $("#RepeatedValue_" + line_id).html();
    var note = $("#NoteValue_" + line_id).val();
    var data = JSON.stringify([category, date, amount, repeated, note]);
    //-----------------^--- Array to JSON string 
    $.post("AjaxHandler.php", {
      "action_name": action_name,
      "data": data
    }, function() {
      //$("#ExpensesId_" + id).css('display', 'none');
    });
  });
});

PHP:

if(isset($_POST['action_name','data'])){
    $action_name = $_POST['action_name'];
    $data=json_decode(json_decode($_POST['data']));
    //-----^--- decoding JSON string
    $query = mysql_query("INSERT INTO Expenses (accountid, category, date, amount, repeated) VALUES ('$accountid', '$data[0]', '$data[1]', '$data[2]', '0')");
}