Phpfox使用ajax实现自动完成

时间:2013-01-29 01:47:03

标签: ajax phpfox

我在我的javascript文件中有这个

$("#searchPlaces" ).autocomplete({
    source:function( request, response ) {
        $.ajaxCall('mymodule.getcities', 'startsWith='+request.term);
    },
    autoFocus: true
});

这是我的ajax php文件。

public function getcities(){
    $cities = array("1" ,"2", "3", "4");
    $this->call(json_encode($cities));
}

它将数组作为json返回正常,但自动完成字段中没有显示任何内容。

有人知道如何使用ajaxCall函数在phpfox中完成此任务吗?

感谢。

2 个答案:

答案 0 :(得分:2)

所以我能解决这个问题。问题是需要指定响应的自动完成。 ajaxCall在成功时没有真正的回调,因此无法使用返回的数据设置响应。我决定绕道而行,手动设置一切。这就是我想出来的。


include\component\controller\mycontroller.class.php

$this->template()->assign(array('token' => Phpfox::getService('log.session')->getToken());


template\default\somehtml.html.php

<input id="security_token" type="hidden" name="phpfox[security_token]" value="{$token}" />


static\jscript\myjavascript.js

  $("#searchPlaces" ).autocomplete({
      source:function( request, response ) {
          $.ajax({ 
            url: "/static/ajax.php",
            minLength: 1,
            dataType: "json",
            data: {
                startsWith: request.term,
                'core[security_token]': $("#security_token").val(),
                'core[ajax]': true,
                'core[call]': 'mymodule.myfunction'
            },
            success: function( data ) {
                response( data );
            }
          });
      },
            autoFocus: true
  });

include\component\ajax\ajax.class.php

public function myfunction(){
        $yourdata = array("1" ,"2", "3", "4");
        $this->call(json_encode($yourdata ));
    }

基本上,安全令牌是通过隐藏元素设置的。该网址将始终为url: "/static/ajax.php",,因为这将为您调用ajax文件。 'core[call]': 'mymodule.myfunction'这将设置为使用$.ajaxCall('mymodule.myfunction')的方式。您需要做的就是找到您想要正常返回的自动填充项目。

希望这有助于万一其他人处于相同的情况。

答案 1 :(得分:0)

默认的phpfox $ .ajaxCall实际上返回一个jQuery jqXHR对象。

因此,不是手动重建整个ajax调用,而是仍然可以使用phpfox的$ .ajaxCall并在.done()promise回调中设置自动完成响应:

$("#searchPlaces" ).autocomplete({
    source:function( request, response ) {
        $.ajaxCall('mymodule.getcities', 'startsWith='+request.term)
            .done(function( data ) {
                response( $.parseJSON(data) );
            });
    },
    autoFocus: true
});

请注意,$ .ajaxCall ajax请求使用'script'作为dataType,因此您需要对返回的字符串进行自己的解析,在这种情况下,它是一个json字符串,$ .parseJSON()将完成这一操作。 / p>