1

我的 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 中完成这项任务?

谢谢。

4

2 回答 2

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 将始终是url: "/static/ajax.php",,因为这将负责为您调用 ajax 文件。'core[call]': 'mymodule.myfunction'这设置为您将如何使用$.ajaxCall('mymodule.myfunction'). 您需要做的就是找到您现在想要正常返回的自动完成项目。

希望这有助于以防其他人遇到同样的情况。

于 2013-01-30T01:57:13.453 回答
0

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

因此,与其手动重建整个 ajax 调用,人们仍然可以使用 phpfox 的 $.ajaxCall 并在 .done() 承诺回调中设置自动完成响应:

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

请注意,$.ajaxCall ajax 请求使用“脚本”作为数据类型,因此您需要自己解析返回的字符串,在这种情况下,它是一个 json 字符串,而 $.parseJSON() 可以解决问题。

于 2013-04-22T14:27:09.187 回答