1

我正在尝试通过 $.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 尝试了这个方法,我确实看到了响应“你好”。这让我得出结论,您不能通过 CROSS 域发送数据$.post。唯一可行的方法是getJSON()除非有人能证明我错了。

4

2 回答 2

3

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

于 2009-11-04T17:14:06.733 回答
2

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

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

于 2009-11-04T17:36:49.690 回答