Ruby on rails XMLHttpRequest Post方法-标头正在停止函数

Ruby on rails XMLHttpRequest Post方法-标头正在停止函数,ruby-on-rails,json,post,xmlhttprequest,Ruby On Rails,Json,Post,Xmlhttprequest,我试图向Rails服务器发送一个XMLHttpRequest对象,但是标头导致我的函数停止。以下是我的观察结果: 当我注释掉设置标题的3行代码时,xhr.readyState最终将等于4(匿名函数中的警报框将被触发) 如果3个标题行中的任何一行未注释,那么xhr对象的状态永远不会改变(没有任何警报框会触发) 我的三个问题是: 为了通过POST方法发送数据,我需要在上面的代码中更改什么 我的印象是POST方法需要发送一些头,但不清楚是哪些头,尽管“xhr.setRequestHeader('Co

我试图向Rails服务器发送一个XMLHttpRequest对象,但是标头导致我的函数停止。以下是我的观察结果:

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

  • 如果3个标题行中的任何一行未注释,那么xhr对象的状态永远不会改变(没有任何警报框会触发)

  • 我的三个问题是:

  • 为了通过POST方法发送数据,我需要在上面的代码中更改什么

  • 我的印象是POST方法需要发送一些头,但不清楚是哪些头,尽管“xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');”似乎是参考文献中经常提到的。有人能帮我理解a)为什么需要发送标题和b)需要发送哪些标题吗

  • 我使用的是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个小时。

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

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


    2) 让服务器返回相应的CORS头。您可以在此处了解有关CORS的更多信息:

    我发现了一个错误:需要在打开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);