我有一张像这张图片中的表,我想从中获取数据并使用这个ajax函数保存它,但它似乎没有将数据传递给php。当我在我的php代码上返回$ this-> request->数据时,console.log()会在显示多个函数的.fail中被触发,当我返回json_encode($ this-> request-> data)时.done被触发但是console.log()显示一个空数组。
编辑: console.log(JSON.stringify(array))=
[{"SIA_ID":"1070","DESCONTO_CNES":"100,00","VALOR_PAGO":"679,19"}]
我做错了什么?
似乎我无法发布图片,所以这里有一个链接: http://i.imgur.com/qC0ol06.jpg
对不起我的英文,希望你能理解。
$("#modal-btn-salvar-desconto").on("click", function() {
var dadosTabela = $("#tabela-estabelecimento").bootstrapTable("getData");
var array=[];
$(dadosTabela).each(function(index) {
array[index] = {
"SIA_ID" : this.ID,
"DESCONTO_CNES" : $("#modal-valor-desconto").val().replace("R$", ""),
"VALOR_PAGO" : this["VALOR_A_PAGAR"]
};
});
console.log(JSON.stringify(array));
$.ajax({
url: "ajaxAtualizar",
type: "POST",
dataType: "json",
data: JSON.stringify(array)
})
.done(function(data) {
var data = JSON.parse(data);
if (!data.salvou){
new PNotify({
icon: false,
text: '<h5>Registro não pôde ser gravado!<h5>',
type: 'error'
});
return;
}
$(".modal-estabelecimento").modal("toggle");
$("#mensagem-ajax").html("<div class='" + (data.salvou ? "alert alert-secondary fade in" : "alert alert-warning fade in") + "'><button type='button' class='close' data-dismiss='alert' aria-hidden='true'>X</button>" + data.mensagem + "</div>");
})
.fail( function(data) {
console.log("FALHOU");
console.log(data);
return;
});
});
public function ajaxAtualizar() {
$this->layout = "ajax";
$this->autoRender = false;
if ($this->request->is("ajax")) {
foreach ($this->request->data as $dados) {
$dados["desconto_cnes"] = str_replace(",", ".", str_replace(".", "", $dados["desconto_cnes"]));
$dados["desconto_rubrica"] = str_replace(",", ".", str_replace(".", "", $dados["desconto_rubrica"]));
$dados["valor_pago"] = str_replace(",", ".", str_replace(".", "", $dados["valor_pago"]));
$existeId = $this->Pagamento->findBySiaId($dados["sia_id"]);
if ($existeId) {
$dados["id"] = $existeId["PagamentoAmbulatoriai"]["id"];
}
}
if ($this->Pagamento->saveAll($dados)) {
return json_encode(array("salvou" => true, "mensagem" => $this->Mensagem->Msgi(7)));
} else {
return json_encode(array("salvou" => false, "mensagem" => $this->Mensagem->Msgi(6)));
}
}
}
答案 0 :(得分:0)
经过两天以上的强调这个问题,一位朋友刚刚添加了
contentType: 'application/json',
到ajax选项,事情开始起作用了。现在我的php控制器看到ajax正在发送什么(没有发生什么)。
我得到并解决的另一个错误是你需要在我用ajax发送的数组的索引处使用小写,如果不是cakephp将不会使用saveAll保存。
虽然一切正常,但我仍然不知道为什么我需要使用这个contentType,因为数据类型已经是json。朋友代码中的很多请求甚至没有这个选项并且有效......
答案 1 :(得分:0)
为了更好地理解,我删除了一些代码。
问题:
JSON.stringify
数组,因为它会将其转换为字符串,并且不会再将其作为数组发布。之后,您必须定义一个将发送帖子值的键,所以请执行此data: {myData:array}
$this->layout = "ajax";
和$this->autoRender = false;
它将为我们提供json数据。我们必须设置这样的数据$this->set($dataToSend); $this->set('_serialize', true);
毕竟所有的代码都是这样的。
$(document).ready(function(){
$.ajax({
url: "ajaxAtualizar",
type: "POST",
dataType: "json",
data: {myData:array} // Put a key
})
.done(function(data) {
console.log(data);
})
.fail( function(jqXHR, textStatus, errorThrown) { // Change
console.log("FALHOU");
console.log(jqXHR.responseText); // Change
return;
});
});
public function ajaxAtualizar() {
$dataToSend = [];
if ($this->request->is("ajax")) {
if ($this->request->data('myData')) {
$dataToSend = array("salvou" => true, "mensagem" => 'Found');
} else {
$dataToSend = array("salvou" => false, "mensagem" => 'Problem');
}
}
$this->set($dataToSend);
$this->set('_serialize', true);
}