【问题标题】:GET / POST node.js (cross-domain)GET / POST node.js(跨域)
【发布时间】:2013-03-02 04:01:51
【问题描述】:

我们的服务器已经可以从客户端接收字符串了。

我们希望客户端返回响应并将其显示在文本区域中。

app.js:

var sys = require ('util'),
    url = require('url'),
    http = require('http'),
    qs = require('querystring');
var stringforfirefox = 'hi man!';
http.createServer(function (req, res) {  



    if(req.method=='POST') {
        var body='';
        req.on('data', function (data) {
            body +=data;
        });
        req.on('end',function(){

            var POST =  qs.parse(body);
            console.log(POST);
        });

    }
    else if(req.method=='GET') {
        var url_parts = url.parse(req.url,true);
        console.log(url_parts.query);

    }


}).listen(1337, "127.0.0.1");

为了测试,我们使用 localhost url。稍后它将是跨域的。 这是网站

index.html:

<!DOCTYPE html>
<html>
<head>

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script>
    <script>



        document.onkeypress = function keypressed(e){

            if (e.keyCode == 112) {

                httpGet('http://localhost:1337/index77?title=message_for_server')  ;
            }


            if (e.keyCode == 113) {

                var xmlhttp;

                xmlhttp=new XMLHttpRequest();

                xmlhttp.onreadystatechange=function()
                {
                    if (xmlhttp.readyState==4 && xmlhttp.status==200)
                    {
                        document.getElementById("textarea1").innerHTML=xmlhttp.responseText;
                    }
                }
                xmlhttp.open("POST","http://localhost:1337/index77",true);
                xmlhttp.send("fname=Henry&lname=Ford");
            }
        }

        function httpGet(theUrl)
        {
            var xmlHttp = null;

            xmlHttp = new XMLHttpRequest();

            xmlHttp.open( "GET", theUrl, false );
            xmlHttp.send( "fname=Henry&lname=Ford" );

            alert( xmlHttp.responseText);
        }
    </script>



</head>
<body>

<form>
    <p>
        <textarea id="textarea1"  cols="25" rows="25" name="textfeld"></textarea>
           </p>
</form>
</body>
</html>

我们想扩展我们这里的代码。

【问题讨论】:

    标签: javascript node.js post get cross-domain


    【解决方案1】:

    您需要发送响应(res)。

    if(req.method=='POST') {
        var body='';
        req.on('data', function (data) {
            body +=data;
        });
        req.on('end',function(){
            res.send(200, "The request's body: " + body);
            var POST =  qs.parse(body);
            console.log(POST);
        });
    

    【讨论】:

    • 出现以下错误:TypeError: Object # has no method 'send'
    • @MichaelMoeller res.statusCode = 200; res.end("The request's body: " + body); (ref: res.write(), res.end()) res.send() 可从其他库获得,例如Express。在这方面,您可能会发现bodyParser()(来自Connect)很有用。
    • @JonathanLonowski 感谢您的支持。我们使用了这段代码,但客户端还没有显示任何反应。
    • @MichaelMoeller 需要检查的几件事:1) 确保每个请求都调用res.end()——GETPOST。 2) file:// 通常不支持 Ajax,因此请确保通过 HTTP/HTTPS 提供页面。 3) 跨域 Ajax 需要额外的工作来验证权限,否则浏览器将拒绝发出请求。有关选项,请参阅 MDN 的 Same-origin policy docs
    • 感谢你们的帮助,我们还没有让它工作(可能是由于我们这边的一个错误)。我们想出了另一个有趣的解决方案并将其发布为答案。
    【解决方案2】:

    XMLHttpRequest() 出于明显的安全原因不能用于跨域发布或获取信息。在某些浏览器上,当您在 localhost 环境中时它可能会工作,但是当网站从 Web 启动时,这是不可接受的。

    要解决这个问题,您必须将 AJAX 请求提交到同一个域,并在服务器端处理跨域操作。

    Google News RSS Feeds 等 JavaScript 工具使用这种方法来解决这些安全障碍。

    【讨论】:

      【解决方案3】:

      这里客户端和服务器之间的字符串交换完美运行:

      app.js:

      var sys = require ('util'),
          url = require('url'),
          http = require('http'),
          qs = require('querystring');
      var stringforfirefox = 'hi man!';
      http.createServer(function (req, res) {
      
          if(req.method=='GET') {
      
              res.statusCode = 200;
      
      
              var url_parts = url.parse(req.url,true);
              var query = url_parts.query["title"];
              console.log(query);
      
              stringforfirefox = 'your input:  '+query;
      
              res.end("__stringexchange(" + JSON.stringify( stringforfirefox) + ");");
          }
      
      
      }).listen(1337, "127.0.0.1");
      

      index.html:

      <!DOCTYPE html>
      <html>
      <head>
      
          <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script>
          <script>
      
      
              function __stringexchange(data) {
      
                  document.getElementById('textarea1').value= data;}
      
      
              document.onkeypress = function keypressed(e){
      
                  if (e.keyCode == 112) {
                      var keyword =  document.getElementById('edit1').value   ;
                      var script = document.createElement('script');
                      script.src = 'http://localhost:1337/?title='+keyword;
                      document.body.appendChild(script); // triggers a GET request
                  }
      
              }
      
      
      
          </script>
      
      
      
      </head>
      <body>
      
      <form>
          <input id="edit1" type="text" name="keyword"><br>
          <br>
          <textarea id="textarea1"  cols="25" rows="25" name="textfeld"></textarea>
      
      </form>
      </body>
      </html>
      

      (来自我们其他question的代码组合。)

      【讨论】:

        猜你喜欢
        • 2011-07-26
        • 2015-01-25
        • 2018-08-28
        • 2012-05-18
        • 1970-01-01
        • 2019-03-29
        • 1970-01-01
        • 2011-06-30
        • 2015-01-17
        相关资源
        最近更新 更多