簡體   English   中英

在Cake PHP 3.0中調用Jquery ajax

[英]Jquery ajax call in Cake PHP 3.0


嗨,我正在嘗試從控制器B向視圖A發出ajax請求,如下所示:

在視圖中A:

var tab = new Array();
    function updateResult(){
            $.ajax({
                type:"POST",
                url:"<?php echo Router::url(array('controller'=>'B','action'=>'viewresult'));?>",
                dataType: 'text',
                async:false,
                success: function(tab){
                    alert('success');
                },
                error: function (tab) {
                    alert('error');
                }
            });
    }

在控制器B中:

public function viewresult()
{
echo 'SUCCESS';
}

問題是在ajax的'響應'中,我'成功'但也是整個視圖A,我不明白為什么......我只想'成功'......

提前致謝 !

根據cakephp方式檢測其ajax是否符合以下代碼:

    if($this->request->is('Ajax')) //Ajax Detection
    {
        $this->autoRender = false; // Set Render False
        $this->response->body('Success');
        return $this->response;
    }

點擊此處查看更多探測器 - http://book.cakephp.org/3.0/en/controllers/request-response.html#Cake \\ Network \\ Request :: addDetector

您也可以使用$ this-> Url-> build而不是包含Router來創建視圖中的鏈接。

echo $this->Url->build(['action'=>'index']);

實現它的最簡單方法是在函數末尾添加die() ,以防止加載整個布局:

public function viewresult()
{
    echo 'SUCCESS';
    die;
}

要么

public function viewresult()
{
    die('SUCCESS');
}

但更傳統的方式是使用JSONView 您的操作應如下所示:

public function viewresult()
{
    $this->set('text', 'SUCCESS');
    $this->set('_serialize', ['text']);
}

您還必須在控制器的initialize()方法中加載RequestHandler組件:

public function initialize()
{
    parent::initialize();

    $this->loadComponent('RequestHandler');
}

您需要為稍后在routes.php連接的所有路由設置允許的擴展:

Router::extensions('json', 'xml');

現在,您可以訪問在其URL的末尾添加擴展名.json的操作,因此您需要修改ajax調用URL:

url:"<?php echo Router::url(array('controller'=>'Main','action'=>'viewresult', '_ext' => 'json'));?>"

這就是全部,但請記住,此解決方案會強制您在響應中處理JSON數組。 在此示例中,輸出將如下所示:

{"text": "SUCCESS"}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM