Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在不使用ajax的情况下使用post发送数据_Javascript_Jquery_Jquery Ui_Jquery Mobile - Fatal编程技术网

Javascript 在不使用ajax的情况下使用post发送数据

Javascript 在不使用ajax的情况下使用post发送数据,javascript,jquery,jquery-ui,jquery-mobile,Javascript,Jquery,Jquery Ui,Jquery Mobile,我想在不使用ajax的情况下以post方法发送数据,因为我想为BlackBerry version5及以下版本开发此应用程序。黑莓也不支持ajax 我使用post as发送数据: function handleLogin() { var form = $("#loginForm"); var u = $("#username", form).val(); var p = $("#password", form).val(); var d = $("#dob"

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

我使用post as发送数据:

  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()函数的两个警报中读取参数

但在服务器端,它们接收参数为
requestString%3D=manish%7C%5eInfo 1234%7C%5E%7C%5EX%…。
表示服务器端未正确接收特殊字符。但在警戒状态下,他们的表现是正确的。为什么会这样?任何帮助都将不胜感激

如果我使用ajax作为工具

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

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

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

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

CGI参数始终以
key1=value1&key2=value2…
的形式给出,其中,如果键和值包含任何特殊字符,则可以对它们进行URI编码

当您这样做时:

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

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

有没有办法在服务器端将特殊字符转换回ascii?我不知道它们在服务器端做什么。这个url只是给我一个服务器收到的响应。这里服务器得到的字符串是:requestString%3D=manish%7C%5eInfo%1234%7C%5E%7C%5EX%。。。。。若我使用上面编辑过的ajax,那个么服务器得到了正确的字符串,如manish ^ info1234 ^ ^ X ^ 11111985 ^ 1.0 ^ ^ ^实际上,当我使用rest客户机工具进行此操作时,我选择方法类型作为post,并将URL作为:并在主体传递参数中作为manish ^ info1234 ^ ^ X ^ 11111985 ^ 1.0 ^然后它给我一个正确的结果。在这里,我不知道传递什么作为密钥?因为在RestClient中,我将RequestString作为URL部分传递。如果我把它作为身体的一部分传递,那么它就不起作用了