繁体   English   中英

XMLHttpRequest Post方法-标头正在停止功能

[英]XMLHttpRequest Post Method - Headers are stopping function

我正在尝试将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个小时。

您的带有JavaScript代码的网页是否也位于localhost:3000上? 如果不是,则将其视为跨域请求,并且您的服务器将需要返回特殊的标头。 因此,您有两种选择:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM