我有一个功能正常的php应用程序,完美地使用AutoSuggest JS脚本,现在我将相同的应用程序移植到codeigniter。我不太喜欢CI,这也是我想尝试这个的原因。 这个问题不起作用。下面是代码。
JS部分
var options = {
script:"/getPartnerLogo?",
varname:"input",
json:true,
shownoresults:false,
maxresults:6,
callback: function (obj) { document.getElementById('partner1').value = obj.info;
}
};
var as_json = new bsn.AutoSuggest('pt1', options);
控制器上的代码
function getPartnerLogo(){
$aUsers = array(
"HSBC",
"Spinneys"
);
$aInfo = array(
"HSB",
"SPN"
);
$input = trim($this->input->get('input'));
$len = strlen($input);
$limit = 6;
$aResults = array();
$count = 0;
if ($len)
{
for ($i=0;$i<count($aUsers);$i++)
{
if (strtolower(substr(utf8_decode($aUsers[$i]),0,$len)) == $input)
{
$count++;
$aResults[] = array( "id"=>($i+1) ,"value"=>htmlspecialchars($aUsers[$i]), "info"=>htmlspecialchars($aInfo[$i]) );
}
if ($limit && $count==$limit)
break;
}
}
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header ("Pragma: no-cache"); // HTTP/1.0
header("Content-Type: application/json");
echo "{\"results\": [";
$arr = array();
for ($i=0;$i<count($aResults);$i++)
{
$arr[] = "{\"id\": \"".$aResults[$i]['id']."\", \"value\": \"".$aResults[$i]['value']."\", \"info\": \"".$aResults[$i]['info']."\"}";
}
echo implode(", ", $arr);
echo "]}";
}
}
现在,当我直接访问控制器时,它会正确返回json。
http://localhost/cd/getPartnerLogo?input=h
{“results”:[{“id”:“3”,“value”:“HSBC”,“info”:“HSB”}}}
但是当我尝试来自JS时它给了我404错误。当我跟踪网络调用表格检查元素时,响应是来自CI的默认404错误页面。
任何人都可以帮我解决这个问题。
答案 0 :(得分:2)
检查您的请求网址 大多数情况下,当您使用 localhost 时,由于URL中的某些错误,ajax请求失败。
例如,您的脚本位于localhost/dc
下,但您的ajax请求已发送至localhost/
。
您可以在localhost上配置虚拟主机和设置域,或者在所有ajax请求上设置基本URL,必须是绝对URL。
要检查您的请求的位置,您可以在开发工具下的firefox / chrome网络选项卡中查看它们。