2010-09-02 100 views
3

我正在使用jQuery向某些控制器操作發出AJAX請求。該請求在相同控制器中的編輯操作視圖中的按鈕中激活。CakePHP:針對Ajax請求的控制器響應錯誤

我的問題: Ajax請求正在返回編輯視圖的所有代碼(包括所有表單和輸入)而不是預期的編號。如果我在添加動作的視圖中放置了相同的ajax按鈕,它會很好地工作(它會返回數字)。

編輯和添加操作保持默認生成狀態(烘烤)。

這是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(); 

      } 
     } 

    } 

這究竟是爲什麼?

感謝

回答

4

我修復了這個問題。它是.ajax函數中的URL參數(一個noob錯誤)

它應該是控制器中引用操作的完整路徑。

這個問題幫我理解這個問題: best practice to use action url while calling ajax in 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 
    }); 

感謝,並請原諒我的英語

+0

嘿,url中的'myapp'是什麼? – 2013-10-19 07:56:49

5

只是一個建議,而無需獲得的一切,你試過嗎?

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

而且我會建議保持簡單:

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

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

,並從那裏走。

+0

感謝xiaohouzi。我嘗試過,但我發現問題可能是URL參數。我改變了'checktargets'爲'/ myapp/campaigns/checkTargets',它正在工作。 – 2010-09-02 05:07:37

+0

@Jose與其讓你的問題懸而未決,我建議添加你的答案並將其標記爲你的首選答案(點擊勾號)。讓人們不要以爲你還在等待答案。 – going 2010-09-02 05:22:36

+0

是的,我會這樣做的。我想確定問題解決了。再次感謝 – 2010-09-03 04:44:54