Javascript xmlhttp请求对象的.open()方法的url参数中的Utf-8字符

Javascript xmlhttp请求对象的.open()方法的url参数中的Utf-8字符,javascript,ajax,utf-8,Javascript,Ajax,Utf 8,我有一个web服务,它试图在一个大数据库中查找以客户端html页面中输入的三个字母开头的所有元素: 下面是我的web服务的Java代码 public class locselall { public String FindEl(String myel ) throws ClassNotFoundException { String strXml = "<response>"; Class.forName("org.postgresql.Driver");

我有一个web服务,它试图在一个大数据库中查找以客户端html页面中输入的三个字母开头的所有元素:

下面是我的web服务的Java代码

public class locselall 
{



public String FindEl(String myel ) throws ClassNotFoundException 
{

    String strXml = "<response>";

    Class.forName("org.postgresql.Driver");
    try 
    {
        conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/plovdivbizloca", "postgres", "tan");
    }

    catch (SQLException ex) 
    {

        ex.printStackTrace();
    }


    Statement mystmt = null;
    String selectQuery = "select biz_subject from pl_biz WHERE biz_subject ILIKE '"+ myel + "%'";

    try {
        mystmt = conn.createStatement();
        ResultSet mysr = mystmt.executeQuery(selectQuery);
        ResultSetMetaData rsmd = mysr.getMetaData();
        int colCount = rsmd.getColumnCount();
        int numberrow = 0;
        strXml += "<rows>";

        while (mysr.next()) 
        {
            strXml += "<row id= '" + numberrow + "'>";
            for (int i = 1; i <= colCount; i++) 
            {
                String elementname = rsmd.getColumnName(i);
                String elementValue = mysr.getString(i);
                strXml += "<colunm colname='" + elementname
                        + "' colvalue='" + elementValue + "'/>";
            }
            numberrow++;
            strXml += "</row>";
        }
        strXml += "</rows>";

    } 
    catch (Exception ex) 
    {

    }
    strXml += "</response>";

    return strXml;
}
一切正常


这是客户端html页面

<html>
<head>
<script>

var xmlhttp;
    if (window.XMLHttpRequest) 
    {
        xmlhttp = new XMLHttpRequest();
    } 
    else 
    {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
function triming()
{

var strInput= document.getElementById('txtInput').value;
//var newstr = strInput.replace(/[\p{L}]/gi, '');
var newstr = strInput.replace(/[^\u0400-\u04FF0-9]/gi, '');

         xmlhttp.onreadystatechange = function() 
        { 
            if (xmlhttp.readyState==4 && xmlhttp.status==200) 
            {
                alert(xmlhttp.responseText);
                //var xmlObj = xmlhttp.responseXML;   
                //var textXML = xmlObj.documentElement.firstChild.firstChild.nodeValue;





            }

        }


        var url = "http://localhost:9091/locselall/services/locselall/FindEl?myel="+ newstr;
        alert (url);

        document.getElementById('pr').innerHTML = url;

        xmlhttp.open("GET", url, true);
        xmlhttp.send(); 





}

</script>

</head>
<body>
<input type= "text" id="txtInput"   />
<input type="button" id="btnSearch" onClick = "triming();"/>
<div id="pr"></div>



</body>
</html>

var-xmlhttp;
if(window.XMLHttpRequest)
{
xmlhttp=新的XMLHttpRequest();
} 
其他的
{
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
函数修剪()
{
var strInput=document.getElementById('txtInput').value;
//var newstr=strInput.replace(/[\p{L}]/gi',);
var newstr=strInput.replace(/[^\u0400-\u04FF0-9]/gi',);
xmlhttp.onreadystatechange=函数()
{ 
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
警报(xmlhttp.responseText);
//var xmlObj=xmlhttp.responseXML;
//var textXML=xmlObj.documentElement.firstChild.firstChild.nodeValue;
}
}
变量url=”http://localhost:9091/locselall/services/locselall/FindEl?myel=“+newstr;
警报(url);
document.getElementById('pr').innerHTML=url;
open(“GET”,url,true);
xmlhttp.send();
}
正如您所见,我有一个关于url的警报,它与我在浏览器中键入的用于测试web服务的url完全相同- 但这次我没有任何记录; 服务器仅返回,这意味着当它到达要选择的语句时,无法执行该语句

我认为问题在于我的变量newstr应该包含utf-8元素,并且它没有正确地发送到服务器。因此,它无法选择任何记录


提前感谢

好吧,问题是,当你像
http://localhost:9091/locselall/services/locselall/FindEl?myel=在Chrome等浏览器中,它实际上会向该URL发出请求:

http://localhost:9091/locselall/services/locselall/FindEl?myel=%D0%A1%D0%98%D0%A2
为了确保这也在代码中发生,您必须使用
encodeURIComponent

var url = "http://localhost:9091/locselall/services/locselall/FindEl?myel="+ 
          encodeURIComponent(newstr);
var url = "http://localhost:9091/locselall/services/locselall/FindEl?myel="+ 
          encodeURIComponent(newstr);