JavaScript 在使用 jQuery ui 自动完成的 Firefox 中失败

标签 javascript jquery-ui servlets jquery

我正在开发一个 JSF 2.0 网络应用程序,我在传递一个由用“|”分隔的不同单词组成的字符串时遇到了问题使用 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>

代码的最后一部分所做的是进入我的 Servlet 并从数据库中检索一个字符串(即 cheese|chocolate|chery|chestnut| ),然后将其放入变量 availableTags 中我们传递给自动完成的内容。

我的 servlet 看起来像这样:

package com.bravo.servlets;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.bravo.codeMaster.codeMaster;
import com.bravo.dropdowns.codeMedicationList;

/**
 * Servlet implementation class Autocomplete
 */
@WebServlet("/Autocomplete")
public class Autocomplete extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Autocomplete() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getOutputStream().print("Unauthorized Access.");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String codeType = request.getParameter("codeType");
        response.getOutputStream().print(codeMaster.getStringList(codeType));
        // This might as well be "response.getOutputStream().print("one|two|three|")
        // for testing purposes, just to make sure it's returning something.
    }

}

XTRA COMMENTS:在我看来,如果我将变量 availableTags 设置为任何字符串,当我设置 $("#pAllergy").autocomplete() 时,我可以'不要改变它。所以我需要从 Servlet 中获取正确的字符串。请帮帮我,我似乎无法弄清楚为什么它在 Firefox 而不是在 IE 中失败。非常感谢您的帮助!

最佳答案

尝试:

//...
dataType: 'text',
success: function(data){
    var availableTags = data.split('|');    
    $("#pAllergy").autocomplete({
        source: availableTags
    });
},
//...

关于JavaScript 在使用 jQuery ui 自动完成的 Firefox 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7700876/

相关文章:

java - 在 Eclipse Europa 中实例化 servlet 类时出错?

javascript - 需要在 React Native 中将对象转换为 FlatList 的数组

jquery - 如何应用多个 jQuery UI 主题

java - 在 Java 中使用 multipart/form-data 获取 HTTP POST 请求中的数据(Spring)

javascript - 如何使 jQuery 可排序放在空列上?

javascript - jQuery - Droppable 不接受多个draggable

java - Servlet 过滤器坚持认为没有响应文本

javascript - 如何等到数组被填满(异步)

javascript - BigCommerce 模板主题-自定义 JavaScript

javascript - 如何选择 jQuery 下拉 val() 并触发事件?