2017-07-27 49 views
0

嗨,谢谢你的帮助,我有一个ajax调用数据,我想发送给控制器,这样我可以在稍后删除指定的数据。目前我想从控制器显示给定的JavaScript。对不起,我的英语,这不是我的第一语言。如何将ajax调用中的数组传递给控制器​​并将其返回给Symfony3

它目前正在返回一个JsonResponse来测试该方法是否被调用,但我想要返回给定的javascript数组(playlogs),我该怎么做?

的Javascript:

<script type="text/javascript"> 
     $(document).ready(function() { 
      $('#deleteBtn').click(function() { 
       var playlogs = []; 

       $.each($("input[name='playlog']:checked"), function() { 
        playlogs.push($(this).val()); 
       }); 
       var confirmText = "Are you sure you want to delete this?"; 
       if (confirm(confirmText)) { 
        $.ajax({ 
         type: "delete", 
         url: '{{ path('playlog_delete_bulk') }}', 
         data: playlogs, 
         success: function() { 
          alert("selected playlogs: " + playlogs.join(", ")); 
         }, 
        }); 
       } 
       return false; 
      }); 

     }); 
    </script> 

deleteBulkAction在PlayLogController:

/** 
* @Route("/delete/bulk", name="playlog_delete_bulk") 
*/ 
public function deleteBulkAction(Request $request) 
{ 
    if ($request->isXMLHttpRequest()) { 
     return new JsonResponse(array('data' => 'Successfully called the named route playlog_delete_bulk ')); 
    } 

    return new Response('This is not ajax!', 400); 
} 

回答

0

您可以发送playlogs为JSON(或任何其他形式,取决于数据)。通过$request->getContent()读取请求正文,并在php数组中解码。

例:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#deleteBtn').click(function() { 
      var playlogs = []; 
      $.each($("input[name='playlog']:checked"), function() { 
       playlogs.push($(this).val()); 
      }); 

      var confirmText = "Are you sure you want to delete this?"; 

      if (confirm(confirmText)) { 
       $.ajax({ 
        type: "delete", 
        url: '{{ path('playlog_delete_bulk') }}', 
        data: JSON.stringify(playlogs), 
        success: function (data) { 
         alert("selected playlogs: " + data.join(", ")); 
        } 
       }); 
      } 
      return false; 
     }); 

    }); 

/** 
* @Route("/delete/bulk", name="playlog_delete_bulk") 
*/ 
public function deleteBulkAction(Request $request) 
{ 
    if ($request->isXMLHttpRequest()) { 
     return new JsonResponse(json_decode($request->getContent())); 
    } 

    return new Response('This is not ajax!', 400); 
} 
+0

我该如何在php数组中解码它,如下所示:$ array = JsonResponse(json_decode($ request-> getContent())); return $ array; – Ducky

+1

'$ array = json_decode($ request-> getContent());' –

+0

我现在得到这个错误:“控制器必须返回一个响应(Array(0 => 25,1 => 11,2 => 24,3 => 14,4 => 17,5 => 26)给出,其中:$ array = json_decode($ request-> getContent()); var_dump($ array); return $ array; – Ducky

0

使用 '请求' ParameterBag访问POST,PUT,PATCH和DELETE数据

$password = $request->request->get('password'); 

和 '查询' - 对GET数据

$pageNumber = $request->query->get('page'); 
+0

THS是不是为我工作,我得到一个错误400 $阵列= $请求 - >请求 - >获取( 'playlogs') ; var_dump($ array); – Ducky

+0

400错误与此无关。 get()将返回参数或NULL。你用$ request-> getContent()得到什么? – svgrafov

+0

我已经将类型设置为POST,现在它正在工作,但是如何在php数组中使用此“新响应”?这引发了一个错误的请求:$ array = new Response($ request-> request-> get('playlogs')); var_dump($ array); – Ducky

相关问题