0

我想在不使用 ajax 的情况下以 post 方法发送数据,因为我想为 blackberry 版本 5 及以下版本开发此应用程序。而且黑莓不支持ajax。

我使用 post 发送数据:

  function handleLogin() {

    var form = $("#loginForm");
    var u = $("#username", form).val();
    var p = $("#password", form).val();
    var d = $("#dob", form).val();

    if (u != '' && p != '') {

        var finalStr = u + encodeURIComponent("|^") + p + encodeURIComponent("|^") + encodeURIComponent("|^") + "X" + encodeURIComponent("|^") + d + encodeURIComponent("|^") + "1.0" + encodeURIComponent("|^|$");
        var encodedURL = encodeURI(intranetUrl + "customer/Ri_logon5.asp?requestString=");
        var parameters = decodeURIComponent(finalStr);
        alert("param:" + parameters);
        post_to_url(intranetUrl + "customer/Ri_logon5.asp", finalStr);




    } else {

        alert("You must enter a username and password", function () {});
        $("#submitButton").removeAttr("disabled");
    }


}


function post_to_url(url, params) {
    var form = document.createElement('form');
    form.action = url;
    form.method = 'POST';

    alert("%%%%%%before" + params);
    var postParam = encodeURIComponent(params);
    postParam = decodeURIComponent(postParam);

    alert("%%%%%%" + postParam);
    var input = document.createElement('input');
    input.type = 'hidden';
    input.name = 'requestString=';
    input.value = params;
    document.body.appendChild(input);
    form.appendChild(input);
    form.submit();

}

在 post_to_url() 函数的两个警报中,我都可以读取参数。manish|^info1234|^|^X|^11111985|^1.0|^|$

但是在服务器端,他们接收参数requestString%3D=manish%7C%5Einfo1234%7c%5E%7C%5EX%..... 意味着特殊字符在服务器端没有正确接收。但在警报中,它们显示正确。为什么会这样?任何帮助将不胜感激。

如果我使用 ajax 作为;

$.post(encodedURL, parameters ,
            function(data) {
              alert("Data Loaded: " + data);
            });

那么为什么服务器端不需要解码字符串呢?

4

2 回答 2

0

您必须在服务器端解码 URL。就像在 Java 中一样,您可以使用

String result = URLDecoder.decode(url, "UTF-8");
于 2012-07-16T11:27:23.380 回答
0

CGI 参数总是作为key1=value1&key2=value2...键和值都可能是 URI 编码的,如果它们包含任何特殊字符。

当你这样做时:

input.name = 'requestString=';
input.value = params;

您正在生成 的单个requestString,并且已经在其中的任何特殊字符params都必须进行 URI 编码。这可能会导致您的值被双重编码

于 2012-07-16T11:41:48.413 回答