如何防止Backbone.js路由(或历史)自动向GET请求添加参数



我有一个非常奇怪的问题,我认为这与Backbone.js路由有关。

在我们的移动应用程序中,有一个登录屏幕,它执行AJAX-Post-Request(带有jQuery),该请求运行在API上。用户名、密码和第三个参数在POST主体中。这很有魅力。

在Backbone.js开始做一些路由之后,这种奇怪的行为开始了。重定向浏览器后,(仅!)用户名和密码将作为参数列表发送到GET请求。

因此,请求即

http://localhost:3000/#login

由于未知原因变成

http://localhost:3000/?username=myuser&password=mypassword#login

请注意,GET请求中的新参数不是POST主体的100%部分,因为缺少savePassword参数。还要注意,登录请求违反API(/API/user/login),而不是登录屏幕(/#login)的路由

我已经尝试了很多东西,也把所有的主干源代码都拆开了,但仍然找不到如何防止这种行为。

另一个注意事项:我只在手机上看到这个,所以在iOS上的UIWebView和Android上的WebView对象中都可以看到。也许这个问题也与手机有关。。。

我很乐意得到任何帮助、答案或提示,以及如何禁用这种行为并从这个奇怪的URL中获取用户名/密码。

编辑:这是登录的AJAX请求。

login: function(username, password, savePassword, successcallback, errorcallback) {
$.ajax({
method: 'POST',
dataType: 'json',
url: config.api_base_url + 'user/login',
data: {
username: username,
password: password,
savePassword: savePassword
},
success: function(data, response, xhr) {
app.auth_token = xhr.getResponseHeader('Authtoken');
$.cookie('auth_token', app.auth_token);
if (successcallback) {
successcallback();
}
},
error: function(data) {
if (errorcallback) {
errorcallback(data);
}
}
});
}

根据jQuery.ajax()docs:

数据

类型:PlainObject或字符串或数组

要发送到服务器的数据。如果还不是字符串。它被附加到GET请求的url中。看见processData选项以阻止此自动处理。对象必须是键/值对。如果值是Array,则jQuery会序列化多个基于传统设置值的具有相同键的值(如下所述)。

然后,您应该在设置中添加等于false的processData

processData(默认值:true)

类型:布尔

默认情况下,将数据作为对象传递到数据选项(从技术上讲,除了字符串之外的任何东西)将被处理,并且转换为查询字符串,适合默认内容类型"application/x-www-form-urlencoded"。如果您想发送DOMDocument或其他未处理的数据,请将此选项设置为false。

代码jQuery.ajax():

login: function(username, password, savePassword, successcallback, errorcallback) {
$.ajax({
method: 'POST',
dataType: 'json',
url: config.api_base_url + 'user/login',
data: {
username: username,
password: password,
savePassword: savePassword
},
processData: false,
success: function(data, response, xhr) {
app.auth_token = xhr.getResponseHeader('Authtoken');
$.cookie('auth_token', app.auth_token);
if (successcallback) {
successcallback();
}
},
error: function(data) {
if (errorcallback) {
errorcallback(data);
}
}
});
}

最新更新