سؤال

أنا أستخدم jQuery لتقديم طلب Ajax لبعض إجراءات وحدة التحكم. يتم تنشيط هذا الطلب من زر في عرض إجراء التحرير في نفس وحدة التحكم.

مشكلتي: طلب AJAX هو إرجاع جميع رمز عرض التحرير (مع جميع النماذج والمدخلات) بدلاً من الرقم المتوقع. إذا وضعت نفس زر Ajax في عرض الإجراء إضافة ، فهو يعمل بشكل مثالي (يعيد الرقم).

يبقى التحرير وإضافة الإجراءات كما تم إنشاؤه افتراضيًا (مع Bake).

هذه هي وظيفة jQuery لجعل طلب AJAX

        $.ajax({
            type: 'POST',
            url: 'checkTargets',
            data: {target: tgt_array, channel: channel_type},
            success:function(data){
                $('#num_subscribers > span').html(data);
            },
            error:function(){
                $('#num_subscribers > span').html("The subscribers could not be loaded");
            },
            timeout: 5000
        });
    } 

هذا هو العمل

function checkTargets() {
        if ($this->RequestHandler->isAjax()) { 
            if(!empty($this->params['form'])) {
                $data = $this->params['form'];

                if ($data['channel'] === 'SMS') {
                    $channel = 'sms';
                } else {
                    $channel = 'pin';
                }

                $targets = $this->processPostTargets($data['target']);
                $this->RequestHandler->respondAs('text');
                //This echo a NUMBER
                echo ClassRegistry::init('Selection')->countSubscribersInTarget($channel, $targets);

                Configure:: write('debug', 0);
                $this->autoRender = false;
                exit();

            }
        } 

    }

لماذا يحدث هذا؟

شكرًا

هل كانت مفيدة؟

المحلول 2

لقد أصلحت المشكلة. كان عنوان URL param في وظيفة .ajax (خطأ noob)

يجب أن يكون طريقًا كاملاً للعمل المشار إليه في وحدة التحكم.

ساعدني هذا السؤال على فهم المشكلة:أفضل الممارسات لاستخدام عنوان URL للعمل أثناء الاتصال بـ Ajax في CakePhP

طلب Ajax الذي تم إصلاحه:

    $.ajax({
        type: 'POST',
        url: '/myapp/campaigns/checkTargets',
        data: {target: tgt_array, channel: channel_type},
        success:function(data){
            $('#num_subscribers > span').html(data);
        },
        error:function(){
            $('#num_subscribers > span').html("The subscribers could not be loaded");
        },
        timeout: 5000
    });

شكرا واعذر لغتي الإنجليزية

نصائح أخرى

مجرد اقتراح دون الوصول إلى كل شيء ، هل جربت هذا؟

$this->autoRender = false;
$this->layout = 'ajax';

كما أقترح إبقائها بسيطة:

$.post("/controller/checkTargets", function(data) {
   alert(data);
}

function checkTargets() {
  $this->autoRender = false;
  $this->layout = 'ajax';
  echo "Im working";
}

وانتقل من هناك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top