【问题标题】:How to send textbox value to a CGI script如何将文本框值发送到 CGI 脚本
【发布时间】:2010-09-29 18:11:13
【问题描述】:

我有一个 id 为 kTb 的文本框。当我在文本框中输入一些值后单击按钮时,下面的 changeV(str) 在 javascript ('onClick="changeV(kTb.value)"') 中被调用。 'alert(str)' 给了我在文本框中输入的值,但是当我传递它'url = "uSetENV.cgi?kullaTest=str"' 时,我没有得到输入的值,它只是 str。请告诉我如何传递/获取输入的值,如果我不清楚,请告诉我,谢谢。

================================================ ====================================

函数变化V(str)

{

alert("starting change value");
alert(str);
urll = "uSetENV.cgi?kullaTest=str";
var reqq

//fw_setenv kullaTest str;
    if (window.XMLHttpRequest) {
    reqq = new XMLHttpRequest();
    reqq.open("GET", urll, true);
    reqq.setRequestHeader( "If-Modified-Since",
                "Sat, 1 Jan 2000 00:00:00 GMT" );
    reqq.send(null);
// branch for IE/Windows ActiveX version
} else if (window.ActiveXObject) {
    reqq = new ActiveXObject("Microsoft.XMLHTTP");
    if (reqq) {
        reqq.open("GET", urll, true);
            reqq.setRequestHeader( "If-Modified-Since",
                "Sat, 1 Jan 2000 00:00:00 GMT" );
        reqq.send();
    }
}
alert("done change value");

}

【问题讨论】:

    标签: javascript cgi query-string


    【解决方案1】:

    JavaScript 没有表示变量的符号(即foo 是一个变量,不需要命名为$foo),因此您不能在字符串中执行变量的插值。你必须明确地构建你的字符串。

    您还应该使用 encodeURIComponent 处理 URI 中具有特殊含义的字符。

    urll = "uSetENV.cgi?kullaTest=" + encodeURIComponent(str);
    

    【讨论】:

      【解决方案2】:

      使用 jQuery - http://api.jquery.com/jQuery.post/

      并且使用 POST,而不是 GET。

      alert("starting change value");
      alert(str);
      $.post('uSetENV.cgi', {'kullaTest': str}, function(data) {
         str = data;
         alert("done change value");
         alert(str);
      });
      
      alert('Here str is still not changed because AJAX requests are asynchronous');
      

      【讨论】:

      • 为什么要使用 POST?我在这个问题中看不到任何暗示它是非幂等操作的东西。
      • 我在 Stack Overflow 上花费的时间越长,我就越意识到“使用 jQuery”确实是大多数“我如何在 JavaScript 中执行 X?”的合适答案。问题。
      • 谢谢'如何'。我是 JS 的新手,我相信你的回答从长远来看会对我有所帮助,但截至目前,我将接受 David Dorward 的回答。再次感谢您的回答。
      • @David Dorward:POST 更好,因为您可以确定它没有被缓存。无需添加 Expire 标头,更好的可扩展性 - 您可以添加非常大的请求。只是因为简单的事情往往会发展得很快。
      • 我喜欢缓存。它可以节省带宽并使接口速度更快。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 2017-08-29
      相关资源
      最近更新 更多