簡體   English   中英

帶有骨干網的PHP跨域(AJAX)代理

[英]PHP Cross Domain (AJAX) Proxy with Backbone

這是我面臨的問題。

我正在使用Laravel 4在域A上構建我的rest api。

該api將為我的應用B上的應用程序提供JSON。

為了避免跨源策略問題,我做了兩件事:

  1. 客戶端-我已經在域B上下載了PHP代理腳本-並使用它向域A上的api發送GET,POST請求。

我使用了位於github上的腳本。

  1. 服務方面,我使Laravel能夠接受CORS。

一切都很好,事情正在“分類”中。

前端由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中。

有任何想法嗎?

我認為這是這里的問題

服務器發送200時,主干模型.save返回錯誤:OK

我查看了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM