0

このアプリケーションをblackberryのバージョン5以下で開発したいので、ajaxを使わずにpostメソッドでデータを送信したいです。ブラックベリーは ajax をサポートしていません。

次のように投稿を使用してデータを送信しています:

  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

CGI パラメータはkey1=value1&key2=value2...、特殊文字が含まれている場合、キーと値の両方が URI エンコードされる場所として常に指定されます。

あなたがするとき:

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

の単一のキーを作成してrequestStringおり、既に含まれている特殊文字はすべてparamsURI エンコードする必要があります。これにより、値が二重にエンコードされてしまう可能性があります。

于 2012-07-16T11:41:48.413 に答える
0

サーバー側で URL をデコードする必要があります。Javaのように、使用できます

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