首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有主干网的PHP跨域代理(AJAX)

具有主干网的PHP跨域代理(AJAX)
EN

Stack Overflow用户
提问于 2014-03-29 16:43:07
回答 2查看 388关注 0票数 0

这是我面临的问题。

我正在域A上用Laravel 4构建我的rest。

api将向我的应用程序提供JSON,该应用程序位于域B。

为了避免跨源政策问题,我做了两件事:

  1. 客户端-我已经在域B上下载了一个PHP代理脚本,并使用它发送GET、POST请求到我的api在域A上。

我使用了位于这里的脚本,在github上。

  1. 发球方,我已经让Laravel接受CORS了。

一切都很好,一切都是“某种”的工作。

前端由主干网控制,这使我找到了问题的根源。

查看代理的文档,下面是如何在jQuery中使用它:

代码语言:javascript
复制
$('#target').load('http://www.yourdomain.com/proxy.php', {
    csurl: 'http://www.cross-domain.com/',
    param1: value1,
    param2: value2
});

基本上,我发送了一个csurl,其值为REST Api域- domainA。

其他params (param1和param2)用于向api发送不同的内容,,如csrf令牌等

说到骨干,我似乎无法使骨干模型正常工作,我也不知道如何处理发送params。

下面是骨干模型:

代码语言:javascript
复制
var MyModel = Backbone.Model.extend({
    url: 'http://domainB.dev/proxy.php'
});

在我看来,我实例化它并尝试传递参数:

代码语言:javascript
复制
var myModel = new MyModel();
myModel.save({
    data: {
        csurl: 'http://domainA.dev'
        param1: 'mytoken'
    }
}, {
    success: function() {},
    error: function() {}
});

这些数据没有到达我的api --我在文章中找到了它,这个帖子实际上有效--但是我没有得到一个成功的回调。

--基本上,我不知道如何将代理的文档实现为主干。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-30 12:19:59

我想这和这里的问题是一样的

服务器发送200时主干网model.save返回错误:好

我查看了proxy.php脚本,没有找到任何json内容类型的头。所以再次:您可以使用以下代码dataType:'text‘来修复它

代码语言:javascript
复制
myModel.save(
    {
        data: {
            csurl: 'http://domainA.dev'
            param1: 'mytoken'
        }
    },
    {
        dataType: 'text',
        success: function(){},
        error: function(){}
    }
);

..。或通过将正确的Content-type头设置为application/json值来修复服务器端。

票数 0
EN

Stack Overflow用户

发布于 2014-03-30 18:33:34

首先,您需要删除模型中的url参数。

代码语言:javascript
复制
var MyModel = Backbone.Model.extend({});

然后创建一个集合。

代码语言:javascript
复制
var MyCollection = Backbone.Collection.extend({
    model: MyModel,
    url: 'http://domainB.dev/proxy.php',
    parse: function(data) {
        return data;
    }
});

之后,将视图代码替换为下面的代码。

代码语言:javascript
复制
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");
    }
}, {});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22733799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档