Javascript cakePhp中的Ajax自动完成-未找到NetworkError:404

Javascript cakePhp中的Ajax自动完成-未找到NetworkError:404,javascript,ajax,cakephp,jquery,Javascript,Ajax,Cakephp,Jquery,我试图通过从我的视图页面使用jQueryUI库(jQueryAutoComplete)来进行ajax调用,以根据用户输入获取部门名称。自动完成函数看起来像 $( "#auto_complete" ).autocomplete({ source: function( request, response ) { $.ajax({ url: "/employees/getAddress", dat

我试图通过从我的视图页面使用jQueryUI库(jQueryAutoComplete)来进行ajax调用,以根据用户输入获取部门名称。自动完成函数看起来像

$( "#auto_complete" ).autocomplete({
        source: function( request, response ) {
            $.ajax({
                url:  "/employees/getAddress",
                dataType: "jsonp",
                data: {
                    featureClass: "P",
                    style: "full",
                    maxRows: 12,
                    name_startsWith: request.term
                },
                success: function( data ) {

                    response( $.map( data.geonames, function( item ) {
                        return {
                            label: item.name,
                            value: item.id
                        }
                    }));
                }
            });
        },
        minLength: 2,
        select: function( event, ui ) {
            log( ui.item ?
                "Selected: " + ui.item.label :
                "Nothing selected, input was " + this.value);
        },
        open: function() {
            $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
        },
        close: function() {
            $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
        }
    });
       class EmployeesController extends AppController {

//var $components = array('Autocomplete');
public $components = array('RequestHandler');
var $helpers = array('Javascript', 'Ajax');
    /**
     * index method
     *
     * @return void
     */
    //var $helpers = array('Ajax');
 public function getAddress() {
        $this->log($this->params, 'debug');
        $this->layout = 'ajax';
        $departments = $this->Department->find('all', array(
        'conditions'=>array('Department.name LIKE'=>$this->params['url']['q'].'%'),
        'fields'=>array('name', 'id')));
        $this->log($departments, 'debug');
        //$this->set('departments', $departments);
        $this->set(compact('departments'));
}
在这里,我正在调用一个名为getAddress()的操作

看起来像

$( "#auto_complete" ).autocomplete({
        source: function( request, response ) {
            $.ajax({
                url:  "/employees/getAddress",
                dataType: "jsonp",
                data: {
                    featureClass: "P",
                    style: "full",
                    maxRows: 12,
                    name_startsWith: request.term
                },
                success: function( data ) {

                    response( $.map( data.geonames, function( item ) {
                        return {
                            label: item.name,
                            value: item.id
                        }
                    }));
                }
            });
        },
        minLength: 2,
        select: function( event, ui ) {
            log( ui.item ?
                "Selected: " + ui.item.label :
                "Nothing selected, input was " + this.value);
        },
        open: function() {
            $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
        },
        close: function() {
            $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
        }
    });
       class EmployeesController extends AppController {

//var $components = array('Autocomplete');
public $components = array('RequestHandler');
var $helpers = array('Javascript', 'Ajax');
    /**
     * index method
     *
     * @return void
     */
    //var $helpers = array('Ajax');
 public function getAddress() {
        $this->log($this->params, 'debug');
        $this->layout = 'ajax';
        $departments = $this->Department->find('all', array(
        'conditions'=>array('Department.name LIKE'=>$this->params['url']['q'].'%'),
        'fields'=>array('name', 'id')));
        $this->log($departments, 'debug');
        //$this->set('departments', $departments);
        $this->set(compact('departments'));
}
但每当我调用ajax时,我都会出错

“未找到网络错误:404-”


如何解决此问题?

我猜您的url中缺少项目文件夹,请尝试:


var webroot = '<?php echo $this->webroot; ?>';
$( "#auto_complete" ).autocomplete({
        source: function( request, response ) {
            $.ajax({
                url:  webroot + "employees/getAddress",
                dataType: "jsonp",
                data: {
                ......

var webroot='';
$(“#自动完成”)。自动完成({
来源:功能(请求、响应){
$.ajax({
url:webroot+“员工/getAddress”,
数据类型:“jsonp”,
数据:{
......

或者您可以在layouts/default.ctp中定义webroot并使用它

C:\xamplite\htdocs\cakephp\app这是我的应用程序的路径您可以告诉我如何给出正确的url吗?url:“app/employees/getAddress”是否,有意义吗?我正在以相同的方式尝试自动完成,但我不确定当我从ajax调用接收数据时如何调用响应函数。您能否扩展显示如何调用该响应回调的答案?