簡體   English   中英

使用不帶ajax的post發送數據

[英]send data using post without ajax

我想在不使用ajax的情況下以post方法發送數據,因為我想為blackberrry version5及更低版本開發此應用程序。 黑莓不支持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);
            });

那么為什么不需要在服務器端解碼字符串呢?

您必須在服務器端解碼URL。 就像在Java中一樣,您可以使用

String result = URLDecoder.decode(url, "UTF-8");

您在發送數據時對url進行編碼,然后在服務器端進行解碼。 我認為這是最佳做法。

使用jQuery,您可以使用以下代碼對網址進行編碼:

encodeURIComponent

CGI參數始終以key1=value1&key2=value2... ,其中,如果鍵和值包含任何特殊字符,則它們都可以使用URI編碼。

當您這樣做時:

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

您將生成一個單個requestString鍵,並且params已經存在的任何特殊字符都必須進行URI編碼。 這可能最終會使您的值被雙重編碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM