我正在尝试通过 $.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 对我来说感觉很丑陋。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top