Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.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
CAKEPHP4从控制器返回数据到AJAX渲染问题_Php_Jquery_Ajax_Cakephp_Render - Fatal编程技术网

CAKEPHP4从控制器返回数据到AJAX渲染问题

CAKEPHP4从控制器返回数据到AJAX渲染问题,php,jquery,ajax,cakephp,render,Php,Jquery,Ajax,Cakephp,Render,我通过AJAX将数据提交给控制器函数,对数据做我需要做的事情,并尝试将其返回到AJAX函数 我遇到的问题是,控制器正在转储错误消息,并试图将我重定向到实际函数。显然,该函数没有视图,这导致出现一个空白的白色屏幕,响应在左上角回响 以下是ajax: $('#submit_new_split_promo').on('click',function(e){ e.preventDefault(); var id = $(this).data('id');

我通过AJAX将数据提交给控制器函数,对数据做我需要做的事情,并尝试将其返回到AJAX函数

我遇到的问题是,控制器正在转储错误消息,并试图将我重定向到实际函数。显然,该函数没有视图,这导致出现一个空白的白色屏幕,响应在左上角回响

以下是ajax:

    $('#submit_new_split_promo').on('click',function(e){
        e.preventDefault();
        var id = $(this).data('id');

        $('#d_overlay').show();
        form = {};
        $.each($('#promo-mail-split-add-'+id).serializeArray(),function(k,v){
            form[this.name] = this.value;
        });

        $.ajax({
            url:$('#promo-mail-split-add-'+id).attr('action'),
            type:"POST",
            dataType: "json",
            data: form
        }).done(function(result){
            var res = JSON.parse(result);

            if (res == 'Duplicate') {
                $('#ms-promo').css('border','3px solid red');
                $('#ms-promo').effect('shake');
                $('#dynamodal-unique-title').text('That code has been used. Please enter a new Promo Code.');

                $('#dynamodal-unique-title').text('That code has been used. Please enter a new Promo Code.').css('color','red').delay(2000).queue(function(next){
                    $('#dynamodal-unique-title').text('Create Mail Split Promo');
                    next();
                });

                return false;       
            }

            $('#mail_split_promo_'+id).modal('toggle');
            if (res == false) {
                alert('Mail Split Promo did not save. Please try again.');
            } else {
                $('#add-promo-to-split-'+id).prop('disabled',true);
                $('#promo-view-abled-'+id).hide();
                $('#promo-view-disabled-'+id).show();
                $('#promo-view-disabled-'+id).prop('disabled',false);
            }

        }).fail(function(){
        }).always(function(){
            $('#d_overlay').hide();
        });
    });
这是控制器代码

public function addpromo() {
    $this->Authorization->skipAuthorization();
    $this->request->allowMethod(['get','post']);
    $this->autoRender = false;

    $data = $this->request->getData();
    $mail_split_id = $data['mail_split_id'];

    $code = $data['code'];

    $result = false;

    $doesExist = $this->Promos->findByCode($code)->toArray();
    if ($doesExist) {
        $result = 'Duplicate';
    }

    if ($result !== 'Duplicate') {

        $MailSplits = $this->getTableLocator()->get('MailSplits');
        $mailSplit = $MailSplits->get($mail_split_id);

        $entity = $this->Promos->newEmptyEntity();
        foreach ($data as $key => $val) {
            $entity->$key = $val;
        }

        $entity->record_count = $mailSplit->record_count;
        $result = $this->Promos->save($entity);
        if ($this->get_property($result,'id')) {
            $promo_id = $result->id;

            $MailSplits = $this->loadModel('MailSplits');
            $mentity = $MailSplits->get($mail_split_id);
            $mentity->promo_id = $promo_id;

            $updated = $MailSplits->save($mentity);
            if ($this->get_property($updated,'id')) {
                $result = true;
            } else {
                $result = false;
            }

            $output = []; 
            exec(EXEC_PATH.'AddPromoToRecordSplits '.$promo_id,$output);

        } else {
            $result = false;
        }
    }

    ob_flush();
    echo json_encode($result);
    exit(0);
} 
它试图将我重定向到的URL是:/promos/addpromo,而我实际上只需要停留在同一页面上,即/mail jobs/view

有几件事需要注意: 我已尝试将该函数添加到控制器策略中,并实际授权初始化的实体。这没有效果,也不会改变我面临的问题

更令人沮丧的是,我在页面上为其他表单编写了基本相同的代码(ajax结构和控制器结构),它们工作得很好。唯一的区别似乎是任何形式的使用ajax的页面上的渲染,工作得很好。我遇到问题的ajax函数似乎都来自Modals中呈现的表单,它们是不同的元素。模态/元素中的每个形式都给了我这个问题,这是我注意到的唯一模式

非常感谢您的帮助,我知道这是一个奇怪而模糊的问题


谢谢大家!

我看不到这两个系统中任何一个应该进行重定向。事实上,您得到的是一个白色页面,这似乎表明它可能会正常提交表单,而不是通过Ajax提交表单,这是一种可能性吗?请注意,尤其是不会终止进程,这将导致整个中间件堆栈无法运行其响应处理逻辑!有关一些提示,请参阅,链接的还有Ajax插件,它还可以使呈现和返回HTML片段变得更容易。