Javascript 使用jQuery的跨域请求(使用Python)

Javascript 使用jQuery的跨域请求(使用Python),javascript,jquery,python,ajax,json,Javascript,Jquery,Python,Ajax,Json,这段Python代码运行良好 print 'foo' params = {'memberId': '1'} data = urllib.urlencode(params) url = 'http://aaa.bbb.com/ccc/' req = urllib2.Request(url, data, {'Content-Type': 'application/json'}) f = urllib2.urlopen(req) response = f.read() print '===>'

这段Python代码运行良好

print 'foo'
params = {'memberId': '1'}
data = urllib.urlencode(params)
url = 'http://aaa.bbb.com/ccc/'
req = urllib2.Request(url, data, {'Content-Type': 'application/json'})
f = urllib2.urlopen(req)
response = f.read()

print '===>', response

response = eval(response.decode('unicode-escape'))   
f.close()
我想知道这个对应的javascript代码是什么?我试过了,警告“错误”。目前我在ddd.bbb.com上。该web服务位于aaa.bbb.com上。我无法为此设置相对路径

请就如何配置跨域提供建议。谢谢

jQuery.ajax({
                        url: 'http://aaa.bbb.com/ccc',
                        type: 'GET',
                        contentType: "application/json",
                        dataType: "json",
                        data: {'memberId':'1'},
                        success: function (data) {
                            alert("ok");
                        },
                        error: function () {
                            alert("error");
                        }
                    });

关于Javascript的“同源策略”以及如何解决它,还有大约一个gajillion(这是我的技术估计;-)的其他堆栈溢出问题。我强烈建议你去看看

作为快速总结,您的基本选项包括:

  • 使用JSONP(这仅在aaa.bbb.com支持JSONP时有效)
  • 让aaa.bbb.com将ddd.bbb.com添加到它的“安全列表”(有一个更好的术语,但我忘了);如果你控制aaa.bbb.com,这可能是你最好的选择
  • 如果您无法执行上述任一操作,请设置一个代理服务(仅Apache可以处理此问题)将ddd.bbb.com/someUrl转发到aaa.bbb.com,以便浏览器认为您正在访问自己的域,但实际上内容来自其他地方
  • 为了让您了解核心问题,其要点是浏览器不允许来自evildomain.com的代码访问yourbank.com,作为安全预防措施。然而,浏览器将允许您从yourbank.com检索脚本,无论您的源代码是什么,因此您可以使用称为JSONP的东西来利用它。。。但是为了让JSONP发挥作用,yourbank.com的所有者必须支持它(他们必须为您定制脚本)

    如果yourbank.com明确表示“如果evildomain.com惹我们麻烦,那就太酷了”,浏览器也会允许您访问yourbank.com。他们把一个特殊的文件放在他们网站上的一个特殊的地方(我忘记了细节,但它们很容易查找)

    如果你不能做到这两个,你可以让你的域名服务器为你转到yourbank.com。服务器不受与浏览器相同的限制,因此它们可以访问任何想要访问的站点。当它这样做时,它可以将在那里找到的内容发送回你,这被称为“代理”(通过evildomain.com发送到yourbank.com,这是代理的结束)


    希望这能澄清一些问题。

    设置相对于脚本路径的url,而不是域的完整位置。您正在浏览器中运行后一个url。同源策略是一种浏览器端保护(考虑到不存在任何跨域配置,我认为可能是这种情况),您的内容类型是json,但您不发送json。@musa-无论您发送什么,因为它都将转换为查询字符串,不管您接收到什么都很重要。正如Alexander所说,常规JSON请求通常不受跨浏览器支持(没有CORS等),与Python相比根本不相关。我搜索了很多结果,尝试了一些,但没有一个有效。请张贴一个可能的解决方案(或链接),你认为可能会解决这个问题?是我能找到的最高评分的。我还改进了我的“快速总结”,为您提供了选项的基本概述。最后一点:上面的python代码本质上是一个代理;如果你想在你的网站上使用该脚本(例如:在
    ddd.bbb.com/proxytoaa
    ),那么你可以在不违反浏览器规则的情况下访问aaa的内容(因为就浏览器所见,你不是从aaa获得它,而是从ddd获得它)。