使用jQuery ui Autocomplete在Firefox中使用JavaScript失败
我正在开发一个JSF2.0Web应用程序,我很难使用servlet将由不同单词组成的字符串(以“|”分隔)传递给jQuery的自动完成。它在IE中工作得很好,但在Firefox中似乎无法检索任何数据 我的XHTML文件是:使用jQuery ui Autocomplete在Firefox中使用JavaScript失败,javascript,jquery-ui,servlets,jquery,Javascript,Jquery Ui,Servlets,Jquery,我正在开发一个JSF2.0Web应用程序,我很难使用servlet将由不同单词组成的字符串(以“|”分隔)传递给jQuery的自动完成。它在IE中工作得很好,但在Firefox中似乎无法检索任何数据 我的XHTML文件是: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<ui:composition template="/WEB-INF/templates/base.xhtml">
<ui:define name="head">
<script>
$(document).ready(function(){
//var availableTags = "yes|maybe|no".split('|');
$.ajax({
type: 'POST',
cache: 'false',
data: 'codeType=allergyList',
url: '/miloWeb/Autocomplete',
async: false,
success: function(data){
availableTags = data.split('|');
},
error: function (xhr, ajaxOptions, thrownError){
alert(ajaxOptions);
}
});
$("#pAllergy").autocomplete({
source: availableTags
});
});
</script>
</ui:define>
<ui:define name="content">
<h2>Allergy List</h2>
<div>
<center>
<br />
<br />
<h:outputText styleClass="description" for="pAllergy">Allergy: </h:outputText>
<h:inputText id="pAllergy" value="#{allergyListBB.allergyList.allergy}" size="30"></h:inputText>
</tr>
<tr>
<td><button onclick="return false;" id="addAllergy">Add</button> </td>
</tr>
</table>
</center>
<h:inputHidden id="delId" value="#{allergyListBB.rowId}"></h:inputHidden>
</div>
</ui:define>
XTRA注释:在我看来,如果我将变量availableTags
设置为任何字符串,那么在设置$(“#pAllergy”).autocomplete()时,我就无法更改它。所以我需要从Servlet中获取正确的字符串。请帮助我,我似乎无法理解为什么它在Firefox而不是IE中失败。我非常感谢您的帮助 试试看:
//...
dataType: 'text',
success: function(data){
var availableTags = data.split('|');
$("#pAllergy").autocomplete({
source: availableTags
});
},
//...
您忘记在servlet中设置HTTP响应头。假设它是
text/plain
,则在向响应写入任何位之前,需要添加以下行:
response.setContentType("text/plain");
通过这种方式,jQuery可以正确地进行“智能猜测”。嘿,Marcelo,谢谢你的帮助,但我试过了,结果是:它确实命中了servlet中的doPost代码,并且检索了列表(来自DB的字符串)。但是当我用断点点击success:function(data)时,它告诉我“data”(数据文档,activeElement“”,async true,attributes null,baseURI),它进入ajax调用的错误部分,因为它不能.split(“|”)这是否意味着它因为某种原因没有真正获得字符串?也就是说,它在firefox=(指定
dataType:'text'
作为$.ajax
调用的属性如何?$.ajax
调用?OMG!就是这样!,来自“dataType--Default:Intelligent Guess(xml、json、脚本或html)”"我猜IE很聪明,知道它发送回的是什么类型,但在Firefox中,我必须将数据类型指定为“text”。Marcelo,我永远感激你,谢谢!=你没有使用JSP。你正在使用它的后续Facelets。另外,问题不在JSF/Facelets端,而是在Servlet端。我修复了错误的JSP标记。是的,这很有效我也是。谢谢你对servlet的解释。
response.setContentType("text/plain");