jquery отправляет междоменные данные через A $.post
Вопрос
Я пытаюсь отправить данные на сайт cakephp (mvc) через $.post().ниже приведен код
$('#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()
если только кто-то не сможет доказать мою неправоту.
Решение
Вы не можете выполнять обычные междоменные запросы ajax.Вам нужно использовать JSONP и это работает только с запросами GET (это потому, что jquery вводит script
тег в DOM для выполнения запроса и script
тег может использовать только GET для получения javascript).
Другие советы
Если вы хотите иметь возможность выполнять междоменные запросы, вам необходимо реализовать HTTP-прокси в вашем домене, который будет выполнять HTTP-запросы от вашего имени через серверную утилиту/библиотеку, такую как Curl или Apache. HTTPклиент или что-то.
Редактировать: JSONP — это решение, но я бы не рекомендовал его, если вам не нужно только выполнять запросы GET (потому что это все, что работает).JSONP также не обязательно совместим с REST, особенно в вашем случае, когда вам нужно сделать запрос POST.Если POST удовлетворяет семантике вашего ресурса и тому, как вы собираетесь им манипулировать, переход на GET только для использования JSONP кажется мне уродливым.