2013-04-27 122 views
11

我真的不明白如何处理来自ajax请求的发布数据。这是我的javascript:ajax在symfony2控制器中请求处理数据

$.ajax({ 
    type: "POST", 
    url: Routing.generate('save'), 
    contentType: 'application/json; charset=UTF-8', 
    data: { 
      title: title,     
      description: description, 
      questions: questions,    
     } 
    }); 

让我的控制器操作中的数据的唯一方法是这样的:

$content = $request->getContent() 

$内容是一个网址参数字符串。 为什么我没有拿到的数据通常与:

$request->get('title') 

什么是处理与jQuery AJAX收作方法初探后数据的正确方法是什么?

非常感谢。

编辑

所以,我发现了以下问题:

在我的当前项目的要求是这样的:

https://dl.dropboxusercontent.com/u/17861060/false.png

$.ajax({ 
      type: "POST", 
      url: Routing.generate('poll_save'),     
      data: { 
       title: title      
      } 
     }) 

数据请求通过请求负载但我不知道为什么。

在清洁项目的要求是这样的:

https://dl.dropboxusercontent.com/u/17861060/right.png

$.ajax({ 
       type: "POST", 
       url: '{{path('_demo')}}',      
       data: { 
        title: 'title',     
        description: 'description', 
        questions: 'questions', 
        pollid: 1       
       } 
      }) 

任何事情在我的项目是怎么了。你知道为什么通过要求数据请求负载

回答

1

您可以构建您的json对象并使用JSON.stringify将JSON对象传递给您的控制器。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify

var obj = { 
     title: title,     
     description: description, 
     questions: questions    
}; 

$.ajax({ 
type: "POST", 
url: Routing.generate('save'), 
contentType: 'application/json; charset=UTF-8', 
data: JSON.stringify(obj) 
}); 
+0

这是正常的工作流程吗?我认为阿贾克斯方法会独自处理它? – 2013-04-27 14:44:09

+0

是的,因为$ .ajax不会将数据序列化为JSON。 – anazimok 2013-04-27 14:49:22

+0

但为什么我不能使用普通的请求方法?我只通过$ request-> getContent()获取数据 – 2013-04-28 21:03:52

9

你使用的请求对象在控制器?

<?php 
namespace Acme\DemoBundle\Controller; 

use Symfony\Component\HttpFoundation\Request; 
//...other things to use 

class MyController extends Controller 
{ 
    public function handleRequestAction() { 

     $request = $this->get('request'); 
     //request your data 
     $title = $request->get('title'); 
     //or in one line 
     $title = $this->get('request')->request->get('title'); 
    } 
} 
?> 

这是我常用的方法,当我想从ajax调用中获取数据时。 你可以发布什么$内容包含?

我发现像发布数据一样没有问题。构建一个json对象可能会有所帮助,但是你做这件事的方式对我来说似乎很好。我也是这样做的。

编辑

通常情况下,你也可以访问所有数据在请求做这个:

$all = $request->request->all(); 

也许你可以再var_dump()变量看,如果事情是在其中。

+0

内容是这样一个字符串:title = sadfsdf&description =&questions%5BD7147573695183%​​5D%5Bquestion%5D = sdfas&questions%5B357147573695183%​​5D%5Bdescription%5D =&question%5B357147573695183%​​5D %5Boptional%5D =假问题%5B357147573695183%​​5D%5Bqtype%5D = 1&问题%5B357147573695183%​​5D%5Bsort%5D = 1&问题%5B357147573695183%​​5D%5Bid%5D = 357147573695183&问题%5B357147573695183%​​5D%5Binput%5D%5B%5D = fsdfasdf&问题%5B357147573695183%​​5D%5Binput%5D%5B%5D = safsdf&questions%5B357147573695183%​​5D%5Bvalid%5D = true&questions%5B357147573695183%​​5D%5Badd%5D = true&pollid = – 2013-04-27 15:21:49

+1

$ request-> request-> all();也是空的。只有getContent()给了我任何数据。当我将数据添加到url部分时,一切都很好。但我需要通过数据参数发送数据,因为发布数据可能非常大。 – 2013-04-27 15:23:05

+0

你的ajax方法是怎样的? – 2013-04-27 15:24:37

1

测验 - 表单名称 连载-populate变量

$.ajax({ 
      url: $("#quiz").attr("action"), 
      data: $("#quiz").serialize(), 
      type: 'POST' 
}); 

$.ajax({ 
       url: $("#commentForm").attr("action"), 
       data: { 
        comment: commentFormID.val() 
       }, 
       type: 'POST' 
}); 

控制器 - 更像是以前的意见建议。

$request = $this->get('request'); 
$usercomment=$request->request->get('parameterName'); 
+0

不适用于我。不明白为什么。 – 2013-04-28 18:41:53

0

为什么选择Json?我的意思是要求内容类型JSON?如果没有,这是我处理Ajax和使用FOSRoutingbundle的方式,我可以看到你正在使用。

$(document).ready(function(){ 
    $('#myForm').submit(function(e){  

     e.preventDefault(); 
     var $form = $(this); 
     var $formPHP = $form.serializeArray(); 
     var $url = Routing.generate('route_to_use'); 

     $.post($url, $formPHP, function(data){ 
     ..... 
     }); 

    });  
}); 

然后在控制器中,您可以使用作为一个正常的请求。