Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何从引导表中获取数据并用ajax保存?_Jquery_Ajax_Cakephp - Fatal编程技术网

Jquery 如何从引导表中获取数据并用ajax保存?

Jquery 如何从引导表中获取数据并用ajax保存?,jquery,ajax,cakephp,Jquery,Ajax,Cakephp,我有一个如图所示的表,我想从中获取数据并用这个ajax函数保存,但它似乎没有将数据传递给php。当我在php代码中返回$this->request->data时,console.log()在.fail处触发,显示多个函数;当我返回json_encode($this->request->data)时,触发.done,但console.log()显示空数组 编辑: console.log(JSON.stringify(数组))= 我做错了什么 似乎我不能发布图片,所以这里有一个链接: 对不起我的英

我有一个如图所示的表,我想从中获取数据并用这个ajax函数保存,但它似乎没有将数据传递给php。当我在php代码中返回$this->request->data时,console.log()在.fail处触发,显示多个函数;当我返回json_encode($this->request->data)时,触发.done,但console.log()显示空数组

编辑: console.log(JSON.stringify(数组))=

我做错了什么

似乎我不能发布图片,所以这里有一个链接:

对不起我的英语,希望你能理解

$("#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)));
        }

    }
}
$(“#模态btn salvar descon”)。在(“单击”,函数(){
var dadosTabela=$(“#tabela estabelecimento”).bootstrapTable(“getData”);
var数组=[];
$(dadosTabela).each(函数(索引){
数组[索引]={
“SIA_ID”:这个.ID,
“描述”:$(“#模态值描述”).val()。替换(“R$”,“”),
“VALOR_PAGO”:这个[“VALOR_A_PAGAR”]
};
});
log(JSON.stringify(array));
$.ajax({
网址:“ajaxAtualizar”,
类型:“POST”,
数据类型:“json”,
数据:JSON.stringify(数组)
})
.done(函数(数据){
var data=JSON.parse(数据);
如果(!data.salvou){
新通知({
图标:false,
案文:“格拉瓦多登记处”,
键入:“错误”
});
返回;
}
$(“.modal estabelecimento”).modal(“切换”);
$(“#mensageajax”).html(“X”+data.mensagem+”);
})
.失败(功能(数据){
控制台日志(“FALHOU”);
控制台日志(数据);
返回;
});
});
公共职能ajaxAtualizar(){
$this->layout=“ajax”;
$this->autoRender=false;
如果($this->request->is(“ajax”){
foreach($this->request->data as$dados){
$dados[“说明”]=str_替换(“,”,“,”,str_替换(“,”,“,$dados[“说明”]);
$dados[“Descon_rubrica”]=str_replace(“,”,“,”,str_replace(“,”,”,$dados[“Descon_rubrica”]);
$dados[“valor_pago”]=str_replace(“,”,“,”,str_replace(“,”,”,$dados[“valor_pago”);
$existeId=$this->Pagamento->findbysaid($dados[“sia_id”);
如果($existeId){
$dados[“id”]=$existeId[“PagamentoAmbulatoriai”][“id”];
}                              
}
如果($this->Pagamento->saveAll($dados)){
返回json_encode(数组(“salvou”=>true,“mensagem”=>this->mensagem->Msgi(7));
}否则{
返回json_encode(数组(“salvou”=>false,“mensagem”=>this->mensagem->Msgi(6));
}
}
}

在两天多的压力下,一位朋友补充道

contentType: 'application/json',
到ajax选项,一切都开始工作了。现在,我的php控制器看到ajax正在发送什么(没有发生什么)

我得到并解决的另一个错误是,我用ajax发送的数组的索引需要使用小写,否则cakephp将无法用saveAll保存


虽然一切正常,但我仍然不知道为什么我需要使用这个contentType,因为数据类型已经是json了。《好友代码》中的许多请求甚至没有这个选项,而且都有效……

在两天多的时间里,一位朋友补充道

contentType: 'application/json',
到ajax选项,一切都开始工作了。现在,我的php控制器看到ajax正在发送什么(没有发生什么)

我得到并解决的另一个错误是,我用ajax发送的数组的索引需要使用小写,否则cakephp将无法用saveAll保存


虽然一切正常,但我仍然不知道为什么我需要使用这个contentType,因为数据类型已经是json了。《好友代码》中的许多请求甚至都没有这个选项,可以正常工作……

为了更好地理解,我删除了你的一些代码

问题:

  • 不要
    JSON.stringify
    数组,因为它会将其转换为字符串,并且不再作为数组发布。之后,您必须定义一个键,在该键中发送post值,这样做就像
    data:{myData:array}
  • 不需要
    $this->layout=“ajax”
    $this->autoRender=false当我们请求json数据类型时,它将为我们提供json数据。我们必须像这样设置数据
    $this->set($dataToSend)$此->设置(“序列化”,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);
    }

为了更好地理解,我删除了您的一些代码

问题:

  • 不要
    JSON.stringify
    数组,因为它会将其转换为字符串,并且不再作为数组发布。之后,您必须定义一个键,在该键中发送post值,这样做就像
    data:{myData:array}
  • 不需要
    $this->layout=“ajax”
    $this->autoRender=false当我们请求json数据类型时,它将为我们提供json数据。我们必须像这样设置数据
    $this->set($dataToSend)$此->设置(“序列化”,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);
    }

JSON.stringify(array)
看起来像?@AmanRawat[{“SIA_ID”:“1070”,“descon_CNES”:“100,00”,“VALOR_PAGO”:“679,19”}]
JSON.stringify(array)
看起来像?@AmanRawat[{“SIA_ID”:“1070”,“descon_CNES”:“100,00”,“VALOR_PAGO”:“679,19”}]谢谢,这也行得通。那么,我什么时候应该使用JSON.stringify呢?检查一下,它已经做了同样的错误,现在它在数据库中工作和保存,我的问题是响应,它总是转到.fail$此->autoRender=false是因为没有view@DiegoCarjan对代码进行了更改。检查
f