jquery通过A$.post发送跨域数据
题
我正在尝试通过 $.post() 将数据发送到 cakephp (mvc) 网站。下面是代码
$('#testReq').click(function () {
console.log('Button Works');
$.post('http://play.anthonylgordon.com/usersessions/store/', { data: 'test7' }, function (data) {
//data contains the json object retrieved.
console.log(data.status);
}, "json");
})
下面是 cakephp 数据,用于检索数据并存储它。如果你懂蛋糕,那就太好了,但如果不懂也没关系。我真的很想弄清楚我是否正确发送了数据
<?php
class UsersessionsController extends AppController {
var $name = 'Usersessions';
var $helpers = array('Html', 'Form','Ajax');
var $components = array('RequestHandler');
function store()
{
Configure::write('debug', 0);
$this->autoRender = false;
echo 'hello';
if ($this->params['url']['data'])
{
$this->data['Usersession']['data'] = $this->params['url']['data'];
$this->Usersession->Save($this->data);
echo 'Success';
}
}
}
?>
正如你所看到的,我在它进行任何评估之前放置了“hello”。我应该能够在我的控制台中看到这一点,但我没有。我用 get 尝试了这个方法,并且确实看到了响应“hello”。这让我得出的结论是,您无法通过以下方式跨域发送数据 $.post
. 。唯一有效的方法是 getJSON()
除非有人能证明我错了。
解决方案
您不能执行普通跨域AJAX请求。您需要使用 JSONP 这仅适用于GET请求(这是因为jQuery注入一script
标签的DOM以执行所述请求和一个script
标签只能使用GET获取的javascript)。
其他提示
如果您希望能够跨域执行请求,则需要在您的域上实现 HTTP 代理,该代理将通过服务器端实用程序/库(如 Curl 或 Apache)代表您发出 HTTP 请求 HTTP客户端 或者其他的东西。
编辑: JSONP 是一个解决方案,但我不会推荐它,除非您只需要发出 GET 请求(因为这就是所有有效的方法)。JSONP 也不一定是 REST 友好的,特别是在您需要发出 POST 请求的情况下。如果 POST 满足您的资源的语义以及您打算如何操作它,那么仅仅为了使用 JSONP 而切换到 GET 对我来说感觉很丑陋。
不隶属于 StackOverflow