CakePhP: استجابة وحدة التحكم لطلب AJAX خاطئ
-
26-09-2019 - |
سؤال
أنا أستخدم 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";
}
وانتقل من هناك.