Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery ui Autocomplete在Firefox中使用JavaScript失败_Javascript_Jquery Ui_Servlets_Jquery - Fatal编程技术网

使用jQuery ui Autocomplete在Firefox中使用JavaScript失败

使用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

我正在开发一个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 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");