我在我的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中完成此任务吗?
感谢。
答案 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>