覆盖 Backbone.ajax 方法以使用 cordovaHTTP
Override Backbone.ajax method to use cordovaHTTP
我正在开发一个使用 Backbone JS 的 phonegap 应用程序。
在 ajax 调用期间 header 包含:
"Origin":"file://"
服务器不支持。我试图将 Origin header 设置为 null 但在 chrome 中是不允许的。
Backbone.ajax = function() {
arguments[0].headers = {
'Accept': "application/json",
'Origin': "null"
};
return Backbone.$.ajax.apply(Backbone.$, arguments);
};
抛出错误:
Refused to set unsafe header "Origin"
我能想到的解决这个问题的唯一方法是使用 cordovaHttp 插件。但我无法弄清楚如何覆盖 Backbone.ajax 以使用 cordovHTTP。
Link 到 cordova 插件:
https://github.com/silkimen/cordova-plugin-advanced-http
尽管这与 CORS 有关,但我的问题是针对使用 cordovaHttpPlugin
覆盖 Backbone ajax 方法
有效:
function isPhoneGap() {
return (window.cordova || window.PhoneGap || window.phonegap)
&& /^file:\/{3}[^\/]/i.test(window.location.href)
&& /ios|iphone|ipod|ipad|android/i.test(navigator.userAgent);
}
Backbone.sync = function( method, model, options ) {
if(method == "read"){
if(isPhoneGap()){
cordova.plugin.http.get(model.url, {}, { Origin: "null" }, function(response) {
// prints 200
console.log(response.status);
try {
options.success(JSON.parse(response.data));
} catch(e) {
console.error("JSON parsing error");
}
}, function(response) {
console.log(response.status);
console.log(response.error);
});
}else{
$.ajax({
type : 'GET',
url : model.url,
dataType : 'json',
success : function(data) {
console.log(data);
if(model instanceof Backbone.Collection){
model.reset(JSON.parse(JSON.stringify(data)));
}else{
model.set(JSON.parse(JSON.stringify(data)));
}
}
});
}
}
}
我正在开发一个使用 Backbone JS 的 phonegap 应用程序。 在 ajax 调用期间 header 包含:
"Origin":"file://"
服务器不支持。我试图将 Origin header 设置为 null 但在 chrome 中是不允许的。
Backbone.ajax = function() {
arguments[0].headers = {
'Accept': "application/json",
'Origin': "null"
};
return Backbone.$.ajax.apply(Backbone.$, arguments);
};
抛出错误:
Refused to set unsafe header "Origin"
我能想到的解决这个问题的唯一方法是使用 cordovaHttp 插件。但我无法弄清楚如何覆盖 Backbone.ajax 以使用 cordovHTTP。
Link 到 cordova 插件: https://github.com/silkimen/cordova-plugin-advanced-http
尽管这与 CORS 有关,但我的问题是针对使用 cordovaHttpPlugin
覆盖 Backbone ajax 方法有效:
function isPhoneGap() {
return (window.cordova || window.PhoneGap || window.phonegap)
&& /^file:\/{3}[^\/]/i.test(window.location.href)
&& /ios|iphone|ipod|ipad|android/i.test(navigator.userAgent);
}
Backbone.sync = function( method, model, options ) {
if(method == "read"){
if(isPhoneGap()){
cordova.plugin.http.get(model.url, {}, { Origin: "null" }, function(response) {
// prints 200
console.log(response.status);
try {
options.success(JSON.parse(response.data));
} catch(e) {
console.error("JSON parsing error");
}
}, function(response) {
console.log(response.status);
console.log(response.error);
});
}else{
$.ajax({
type : 'GET',
url : model.url,
dataType : 'json',
success : function(data) {
console.log(data);
if(model instanceof Backbone.Collection){
model.reset(JSON.parse(JSON.stringify(data)));
}else{
model.set(JSON.parse(JSON.stringify(data)));
}
}
});
}
}
}