我正在开发一个JavaScript(jQuery)应用程序,该应用程序收集用户数据(姓名,性别,生日等)并将其发送给Heroku托管的Rails应用程序。Rails从请求中读取JSON,并应该创建一个新记录。我的代码如下
params = {};
params.session_user = {};
var e = {
"username" : localStorage.getItem("UN"),
"gender" : gender,
"birthdate" : birthdate,
"session_id" : getSessionID(),
};
params.session_user = e;
$.post("https://***.herokuapp.com/session_users", params);
该功能适用于Firefox,Chrome,Opera和IE,但不适用于Safari。Safari继续说POST请求已取消,并且在数据库上从未创建任何记录。
类似地,jQuery应用程序还在应用程序的每个页面上收集使用数据,称为focus_events。我使用了相同的格式
var e = {
"timestamp" : (new Date).toUTCString(),
"focus_type" : type,
"page" : page_id,
"problem_set": problem_set_id,
"session_id" : getSessionID(),
}
params={};
params.focus_event={};
params.focus_event=e;
$.post("https://***.herokuapp.com/focus_events",params);
这在大多数情况下都有效。但有时,在所有浏览器中,POST请求也会显示为已取消。与此问题和Safari问题有关的任何帮助将不胜感激
我解决了这个问题。为后代在此处发布答案。$ .post()(这是ajax()的包装器)默认情况下异步发送请求。当我单击用户的下一页按钮时发送我的请求时,浏览器加载新页面时这些请求被切断。将我的$ .post(...)更改为
$.ajax({
url : "https://***.herokuapp/controller_name",
data : params,
type : 'POST';
async : false,
});
工作精美。解决了Safari问题和focus_event问题。请注意,在同步发送时,并且取决于服务器的响应速度,您可能需要耐心等待并等待请求完成。在请求完成之前,浏览器将不会加载下一页。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句