Я пытаюсь отправить данные json на свой контроллер Symfony2, используя метод $.ajax jquery (1.12.4).
Мой javascript:
var category_type = 2;
var json_data = JSON.stringify(category_type);
$.ajax({
type: "POST",
url: Routing.generate('homepage'),
contentType: 'application/json',
dataType: "json",
data: json_data,
beforeSend: function (xhr){
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
},
success: function (result, status, xhr) {
console.log(result);
console.log(status);
},
error: function(xhr, status, error) {
console.log(error);
console.log(status);
}
});
Мой контроллер:
/**
* @Route("/", name="homepage", options={"expose"=true})
*/
public function indexAction(Request $request) {
if($request->isXmlHttpRequest()){
$content = $this->get("request")->getContent();
$cat = json_decode($content, true);
var_dump($content);
exit;
}
else {
echo 'Sorry!';
exit;
}
Однако я получаю сообщение "Извините! каждый раз. Теперь я не уверен, что я использовал xhr: setRequestHeader("X-Requested-With","XMLHttpRequest"),
правильно. Но без этого я получаю тот же результат.
Я также попытался удалить условие if/else
и попробовал $content = $this->get("request")->getContent();
, Но когда я делаю var_dump($content);
, Я получаю пустую строку, т.е. string '' (length=0)
Вопрос:
$request->isXmlHttpRequest()
возвращает false
?$.ajax
)?$this->get("request")->getContent();
)?Попробуйте в своем ajax-вызове:
data: { json_data }
вместо:
data: json_data
И если вы хотите видеть данные POST от запроса, вы должны сделать это:
dump($request->request);
=> Я советую вам использовать функцию dump
(SF 2.6 => см. Документ для его использования)
РЕДАКТИРОВАТЬ
Попробуйте сделать этот простой вызов, и если он работает, вам просто нужно воспроизвести его своими собственными данными:
var data = {"name":"John Doe"}
$.ajax({
dataType : "json",
contentType: "application/json; charset=utf-8",
data : JSON.stringify(data),
success : function(result) {
alert(result.success); // result is an object which is created from the returned JSON
},
});
data: { json_data }
но успех обратного вызова success: function (result, status, xhr) {alert(result);}
дает нулевое значение
console.log
ваш "json_data" до вызова ajax, он не пуст? А в вашем контроллере просто сделайте dump($request->request);exit;
xhr: setRequestHeader("X-Requested-With","XMLHttpRequest")
я обычно не указываю ничего на стороне клиента ....