symfony2 ajax调用始终返回null数据

时间:2016-02-08 16:19:14

标签: php ajax symfony

我正在使用Symfony 2.7并且我从数据库查询信息并在页面上显示它但是我想通过Aji调用通过api连接通过单击按钮获取当前值但是我总是从Ajax Controller获得空响应

<div>
    <p id="product">1K0615301M1</p>
    <p id="product">1K0615301M2</p>   
    <input type="button" id="submit" value="Check"/>
</div>

<script>
     $(document).ready(function(){
         $('#submit').click(function(event) {
             var productNr = [];
             $('#product').each(function() {
                 productNr.push($(this).html());
             });
             console.log(ProductNr); // value of ProductNr
             var ajaxRequest;
             event.preventDefault();

             ajaxRequest = $.ajax({
                 url: " {{ path('frontend_api_product') }}",
                 type: "post",
                 processData: false,
                 contentType: 'application/json; charset=UTF-8',
                 data: ProductNr,
                 success: function (data) {
                     console.log(data);
                 }
             });
         });
     });
 </script>

我的控制器:

public function AjaxAction(Request $request)
{
    $sparepart = $request->request->get('data');

    if ($request->isXMLHttpRequest()) {
        return new JsonResponse(array(
            'sucess'=> true,
            'data' => $sparepart
        ));
    }
    return new Response('This is not ajax!', 400);
}

CONSOLE.LOG

 Object { sucess: true, data: null }

2 个答案:

答案 0 :(得分:1)

由于您的数据对象没有data键,因此您无法通过执行$request->request->get('data');

来检索它

要获取整个对象,请使用$data = $request->request->all();

您的代码中存在许多错误 您正在推动productNr而不是ProductNr中的值 你有许多具有相同id的元素(一个id是uniq,你必须使用类)。

修改

问题在于您发送的数据的格式。 要发送{"data":["1K0615301M1","1K0615301M2"]}之类的对象,请使用:

var ProductNr = { data: [] };
var ajaxRequest;

$('.product').each(function() {
    var product = $(this).text();
    ProductNr.data.push(product);
});
ajaxRequest = $.ajax({
    url: "/ajax",
    type: "POST",
    data: JSON.stringify(ProductNr),
    processData: false,
    success: function (data) {
        console.log(data);
    }
});

在发送数据之前使用JSON.stringify序列化数据 见How do I POST an array of objects with $.ajax (jQuery or Zepto)

答案 1 :(得分:0)

更改
  data: ProductNr,

data:{data:ProductNr}