【问题标题】:how to post data to an ajax function with Jsoup如何使用 Jsoup 将数据发布到 ajax 函数
【发布时间】:2013-04-27 15:18:19
【问题描述】:

我想发布一个字符串到

<li id="coz"><a
        onclick="doRequest('zemberek.jsp','YAZI_COZUMLE');">Cozumle</a></li>

by Jsoup?.我该怎么办? 这是原始网站:http://zemberek-web.appspot.com/

<html>
<head>
    <script>
        function doRequest(url, islem) {
            var ajaxRequest = new AjaxRequest(url);
            var hiddenField = document.getElementById("islem");
            hiddenField.value = islem;
            ajaxRequest.addNamedFormElements("giris", "islem");
            ajaxRequest.sendRequest();
        }
    </script>
</head>

<body>
<big>Zemberek Demo</big>
<small>(<a href="http://code.google.com/p/zemberek">Zemberek
Proje Sitesi</a>)</small>
<div id="menu">
<ul id="nav">
    <li id="denetle"><a
        onclick="doRequest('zemberek.jsp', 'YAZI_DENETLE');">Denetle</a></li>
    <li id="coz"><a
        onclick="doRequest('zemberek.jsp','YAZI_COZUMLE');">Cozumle</a></li>
    <li id="oner"><a onclick="doRequest('zemberek.jsp','ONER');">Oner</a></li>
    <li id="ascii2tr"><a
        onclick="doRequest('zemberek.jsp','ASCII_TURKCE');">Ascii->Tr</a></li>
    <li id="tr2ascii"><a
        onclick="doRequest('zemberek.jsp','TURKCE_ASCII');">Tr->ascii</a></li>
    <li id="hecele"><a onclick="doRequest('zemberek.jsp','HECELE');">Hecele</a></li>
    <li id="ayristir"><a
        onclick="doRequest('zemberek.jsp','SACMALA');">Sacmala</a></li>
</ul>
</div>


<br>
<br>
<br>
<br>
<br>

<form id="form" action="#">
<P align=center><b>Islem yapilacak yaziyi asagidaki alana
giriniz.</b><br>
<textarea name="giris" rows="10" cols="60"></textarea> <input
    type="hidden" name="islem" id="islem" /></P>
</form>

<br>

<div id="div"></div>

</body>
</html>

【问题讨论】:

    标签: java ajax parsing jsoup


    【解决方案1】:

    使用 Jsoup 的简单且有效的解决方案:

    代码

    String url = "http://zemberek-web.appspot.com/zemberek.jsp?ts=1367326940830&giris=%s&islem=YAZI_COZUMLE";
    
    String query = "MyParamĄĘÓŚŁ";
    
    String formattedUrl = String.format(url, URLEncoder.encode(query, "UTF-8"));
    
    Document document = Jsoup.connect(formattedUrl).get();
    
    String result = document.select("taconite-root > taconite-replace-children > div").text();
    
    System.out.println(result);
    

    结果

    MyParam :cozulemedi
    

    【讨论】:

    • 谢谢你,这是工作。所以,但由于 UTF-8,我无法获取某些单词的结果。我该如何处理?
    【解决方案2】:

    如果您在 Google Chrome 开发人员工具中查看请求,我认为答案如下:当您单击生成的 url 时,您会看到以下示例:

    http://zemberek-web.appspot.com/zemberek.jsp?ts=1367076182039&giris=bnfhjfttgfhffgfg&islem=ASCII_TURKCE
    

    giris=bnfhjfttgfhffgfg => 是您发送到服务器的字符串。

    所以你可以在下面的每一种编程语言中这样做

    http://zemberek-web.appspot.com/zemberek.jsp?ts=1367076182039&giris=MY_STRING&islem=ASCII_TURKCE
    

    不要忘记为查询字符串对字符串进行 UTF-8 编码

    更新

    这是我做的一个例子

    public class MyRequester {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
    
            HttpURLConnection conn = null;
            InputStream in = null;
    
            try {
    
    
                String textToSend = "Java is cool :)";
                String urlRequest = "http://zemberek-web.appspot.com/zemberek.jsp?ts=1367076182039&giris="+URLEncoder.encode(textToSend, "UTF-8")+"&islem=ASCII_TURKCE";
    
                System.out.println(urlRequest+"\n");
    
                conn = (HttpURLConnection) new URL(urlRequest).openConnection();
                in = conn.getInputStream();
    
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                StringBuilder sb = new StringBuilder();
                String data = null;
    
                while ((data = reader.readLine()) != null) {
                  sb.append(data);
                }
    
                System.out.println(sb.toString());
    
    
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            finally {
    
                if(conn != null){
                    conn.disconnect();
                }
    
                if(in != null){
                    try {
                        in.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
    
            }
    
    
    
        }
    
    }
    

    控制台输出:

    http://zemberek-web.appspot.com/zemberek.jsp?ts=1367076182039&giris=Java+is+cool+%3A%29&islem=ASCII_TURKCE
    
    <taconite-root> <taconite-replace-children  contextNodeID="div" parseInBrowser="true"><div> Java <font color="#33AA33">iÅŸ</font> <font color="#FF0033">cool</font> :) </div> </taconite-replace-children> </taconite-root>
    

    请求的结果是一个 XML 文档。根据我的经验,我会使用 SAX 而不是 Java XML 本机实现。

    【讨论】:

    • 我如何使用这个 url 获得发布字符串的结果?
    • 我做了一个例子来展示如何做到这一点。您只需要使用从发出的请求中提供输入流的 URL 类。实际上,输入流是所有元素发送回浏览器。这样你就可以做你想做的事了
    猜你喜欢
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 2013-10-21
    • 1970-01-01
    相关资源
    最近更新 更多