【发布时间】:2012-02-19 10:14:57
【问题描述】:
我正在尝试将 XMLHttpRequest 对象发送到我的 Rails 服务器,但标头导致我的函数停止。以下是我的观察:
当我注释掉设置标题的 3 行代码时,xhr.readyState 最终将等于 4(匿名函数中的警报框会触发)。
-
如果 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); }
我的三个问题是:
为了通过 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 小时。
【问题讨论】:
标签: ruby-on-rails json post xmlhttprequest