[英]PHP Cross Domain (AJAX) Proxy with Backbone
這是我面臨的問題。
我正在使用Laravel 4在域A上構建我的rest api。
該api將為我的應用B上的應用程序提供JSON。
為了避免跨源策略問題,我做了兩件事:
我使用了位於github上的腳本。
一切都很好,事情正在“分類”中。
前端由Backbone控制,這使我發現了問題的根源。
查看代理的文檔,這是它應如何與jQuery一起使用:
$('#target').load('http://www.yourdomain.com/proxy.php', {
csurl: 'http://www.cross-domain.com/',
param1: value1,
param2: value2
});
基本上,我送我的REST API的域值的csurl - DOMAINA
其他參數(param1和param2)用於將不同的內容發送到api, 例如csrf令牌等等 。
進入Backbone后,我似乎無法使Backbone模型正常工作,而且我不確定如何處理發送參數。
這是骨干模型:
var MyModel = Backbone.Model.extend({
url: 'http://domainB.dev/proxy.php'
});
在我看來,我將其實例化並嘗試傳遞參數:
var myModel = new MyModel();
myModel.save({
data: {
csurl: 'http://domainA.dev'
param1: 'mytoken'
}
}, {
success: function() {},
error: function() {}
});
數據未到達我的api-我在帖子中找到了它,帖子實際上起作用了-但我沒有收到成功的回調。
基本上,我不知道如何將代理的文檔實現到Backbone中。
有任何想法嗎?
我認為這是這里的問題
我查看了proxy.php腳本,但沒有找到json內容類型的任何標頭。 再說一遍:您可以使用以下代碼dataType:'text'對其進行修復
myModel.save(
{
data: {
csurl: 'http://domainA.dev'
param1: 'mytoken'
}
},
{
dataType: 'text',
success: function(){},
error: function(){}
}
);
...或通過將正確的Content-type
標頭設置為application/json
值來修復服務器端。
首先,您需要在模型中刪除url參數。
var MyModel = Backbone.Model.extend({});
然后創建一個集合。
var MyCollection = Backbone.Collection.extend({
model: MyModel,
url: 'http://domainB.dev/proxy.php',
parse: function(data) {
return data;
}
});
之后,用此代碼替換您的視圖代碼
var that = this;
formData = {
csurl: 'http://domainA.dev',
param1: 'mytoken'
}
this.collection = new MyCollection();
this.collection.save({
data: formData,
success: function(collection, response) {
console.log(that.collection);
alert("success");
},
error: function() {
alert("error");
}
}, {});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.