【问题标题】:XMLHttpRequest Post Method - Headers are stopping functionXMLHttpRequest Post 方法 - 标头正在停止功能
【发布时间】:2012-02-19 10:14:57
【问题描述】:

我正在尝试将 XMLHttpRequest 对象发送到我的 Rails 服务器,但标头导致我的函数停止。以下是我的观察:

  1. 当我注释掉设置标题的 3 行代码时,xhr.readyState 最终将等于 4(匿名函数中的警报框会触发)。

  2. 如果 3 个标题行中的任何一个未注释,则 xhr 对象永远不会更改状态(警告框都不会触发)。

    function saveUserProfile(){
    
      var user_email = $('#userEmail_box').val();           
      var xhr = new XMLHttpRequest();
    
      xhr.onreadystatechange=function(){
        if (xhr.readyState==4 && xhr.status==200)
        {
            alert("Yes: " + xhr.readyState);
        }
        alert("No: " + xhr.readyState);     
      }
    
      var method = 'POST';
      var params = 'userEmail=user_email';
      var url = 'http://localhost:3000/xhr_requests.json';
      var async = true;
    
      //Need to send proper header information with POST request
      xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
      xhr.setRequestHeader('Content-length', params.length);
      xhr.setRequestHeader('Connection', 'close');
    
      xhr.open(method, url, async);
      xhr.send(params);
    }
    

我的三个问题是:

  1. 为了通过 POST 方法发送数据,我需要在上面的代码中进行哪些更改?

  2. 我的印象是 POST 方法需要发送一些标头,但不清楚哪些标头虽然 "xhr.setRequestHeader('Content-type', 'application/x-www-form- urlencoded');"似乎是参考文献中经常提到的一个。有人可以帮我理解 a) 为什么需要发送标头和 b) 需要发送哪些标头?

  3. 我正在使用 Rails 服务器并正在本地开发。最终,此代码将在移动设备的客户端执行,该移动设备将转到托管的 Rails 服务器以传递和接收数据。在 Rails 服务器上使用 POST 方法是否有限制?请记住,我打算在从服务器向客户端发送信息时使用 JSON。

谢谢!

更新:标头应该在打开 xhr 请求之后但在发送之前出现:

    xhr.open(method, url, async);        

    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xhr.setRequestHeader('Content-length', params.length);
    xhr.setRequestHeader('Connection', 'close');

    xhr.send(params);

希望这篇文章可以为其他人节省 4 小时。

【问题讨论】:

    标签: ruby-on-rails json post xmlhttprequest


    【解决方案1】:

    您的带有 JavaScript 代码的网页是否也在 localhost:3000 上?如果不是,这将被视为跨域请求,您的服务器将需要返回特殊的标头。所以你有两个选择:

    1) 将网页托管在与服务器相同的域上,这将使其成为同域请求。

    2) 让您的服务器返回适当的 CORS 标头。您可以在此处了解有关 CORS 的更多信息:http://www.html5rocks.com/en/tutorials/cors/

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2017-04-05
    相关资源
    最近更新 更多