如何实现一个跨领域的Ajax请求使用Cake和技?
-
20-08-2019 - |
题
我使用Cake为我的项目,我发生XML意见,这样我可以与他们进行互动(。)从外部网站。有鉴上需要的网站。
基本上,我想看"http://mycakeapp.com/posts/views/1.xml"从"http://www.example.com"
然而,我得到这个错误时采用google i/o大会的ajax功能: 访问受限制的URI拒绝"的代码:"1012.它似乎从google搜索,也许想他是一个选项。。但它不是原来的蛋糕,因此我宁愿使用xml:(
我已经尝试采用一个框架:它加载了登陆屏幕和后我登录,则载入当前页(例如"http://www.example.com")!尽管该框架源"http://mycakeapp.com/posts/views/1.xml"
有人处理这个问题吗?
更新: 要多一点具体的,我想创建一个书签,与我的网站(建立在Cake),因此url代理的方法不会的工作(但谢谢你的建议)
解决方案
JSONP绝对是你在找什么。
也许下页可以帮助你: HTTP:// WWW。 ibm.com/developerworks/xml/library/x-xml2jsonphp/
其他提示
只要使PHP代理脚本。让Ajax请求代理脚本,让您的代理脚本“前进”跨域您的要求,通过使用卷曲,只是有你的代理脚本回声出你从你的卷曲的请求得到响应,你会好到哪里去。
如mmattax所提到的,要做到这一点的最简单的方法是通过使用代理的脚本。
这里的一个脚本我使用调出到另一个域,给它传递一个urlencoded的proxy_url参数。
url_proxy.php
// Is it a POST or a GET?
$url = ($_POST['proxy_url']) ? $_POST['proxy_url'] : $_GET['proxy_url'];
// Open the Curl session
$session = curl_init($url);
// If it's a POST, put the POST data in the body
if ($_POST['proxy_url']) {
$postvars = '';
while ($element = current($_POST)) {
if (key($_POST) != 'proxy_url') {
$postvars .= key($_POST).'='.$element.'&';
}
next($_POST);
}
curl_setopt ($session, CURLOPT_POST, true);
curl_setopt ($session, CURLOPT_POSTFIELDS, $postvars);
}
// Don't return HTTP headers. Do return the contents of the call
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
// Make the call
$response = curl_exec($session);
// Return the response
if (curl_errno($session)) {
$error_message = curl_error($session);
echo 'Error: '.$error_message;
} else {
echo $response;
}
curl_close($session);
?>
在你的情况,你可能要改变的错误处理位返回XML你的应用程序可以分析的有效位。
我通常把这个在我的根目录,并从JavaScript的东西,如把它叫做:
function showMapLegend(baseURL, layer) {
var url = 'http://our-map-server/get-a-legend.php?layer='+layer;
var dt = new Date();
var proxy = baseURL + '/url_proxy.php?currDate='+dt.getTime()+'&proxy_url=';
url = proxy + encodeURIComponent(url);
new Ajax.Request(url, {
method: 'get',
onSuccess: function(transport) {
$('map-legend-img').src = transport.responseText;
new Effect.Appear('map-legend', {duration: 0.5});
}
});
}
JavaScript函数上面用来得到一个简单的URL字符串从我们的地图服务器返回的例子中,我们不关心,如果失败,所以没有onFailure处等,它主要原型,但我敢肯定你的想法这是如何使用代理的脚本。
在基本URL变量传递中,它应包含基地 “ HTTP://服务器/ theappname ” 等URL为自己的应用。