jquery通过A $ .post发送跨域数据

时间:2009-11-04 17:08:11

标签: php jquery cakephp getjson .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';
            }   
        }
    }
?>

正如你所看到的,在进行任何评估之前我都会把'你好'。我应该能够在我的控制台中看到它,但我不知道。我用get尝试了这个方法,我确实看到了响应'hello'。这让我得出的结论是,您无法通过$.post发送数据CROSS域名。唯一可行的方法是getJSON(),除非有人可以证明我错了。

2 个答案:

答案 0 :(得分:3)

您无法执行普通的跨域ajax请求。您需要使用JSONP,这仅适用于GET请求(这是因为jquery向DOM注入script标记以执行请求,而script标记只能使用GET获取javascript)。

答案 1 :(得分:2)

如果您希望能够跨域执行请求,则需要在您的域上实现HTTP代理,该代理将通过服务器端实用程序/库(如Curl或Apache)代表您发出HTTP请求{{3等等。

编辑: JSONP是一个解决方案,但我不推荐它,除非您只需要发出GET请求(因为这一切都有效)。 JSONP也不一定是REST友好的,特别是在您需要发出POST请求的情况下。如果POST满足您的资源的语义以及您打算如何操作它,那么切换到GET只是为了使用JSONP对我来说感觉很难看。