首页 文章

无法从symfony 3中的ajax post请求访问请求数据

提问于
浏览
0

我正在使用symfony 3.4,我想向控制器发送一些数据,但我不知道为什么我无法访问它,就像它在symfony文档中显示一样:

这是我的js函数:

function sendQuantitiesToController() {

// Validate data
var validation = validateQuestionnaireReviewFormData();
if (validation === false) {
    return false;
}
// Get form data
var data = getReviewFormComponentsData();
var id = document.getElementById('questionnaire-id').innerText;

// Send data 
$.post("http://localhost:8000/questionnaire/"+id+"/review", {
    components:              data.components,
    optional_components:     data.optional_components
},
function(response, status) {
    if (status == 'success') {
        return true;
    } else {
        return false;
    }
});

}

这是我的控制器功能:

/**
 * Questionnaire result review
 *
 * @Route("/questionnaire/{id}/review", name="_questionnaire_review", requirements={"id" = "\d+"})
 * @Template()
 */
public function questionnaireReviewAction(Request $request, $id)
{

    $form = $this->createForm(ResultOverviewType::class, $result);
    $contactForm = $this->createForm(ContactType::class, $contact);
    if ($request->isMethod('POST')) {            
        // Get data from request 
        $components = $request->request->get('components');
        $optionalComponents = $request->request->get('optional_components');
        ...
        }  
    }

    return [
        'form'              => $form->createView(),
        'contactForm'       => $contactForm->createView(),
        'questionnaire'     => $questionnaire
    ];
}

树枝模板:

{{ form_start(form, {'attr': {'onsubmit': 'sendQuantitiesToController();'}, 'action': path('_questionnaire_review', {'id': questionnaire.id}), 'method': 'POST'}) }}            
            {{ form_widget(form) }}
            {{ form_widget(contactForm) }}
        {{ form_end(form) }}

问题是控制器中的$ request-> request-> get('components')总是为null,但是我用console.log检查了getReviewFormComponentsData()并且那里有数据所以问题可能是ajax post请求 . 我做错了什么?谁能帮我?

感谢帮助!

1 回答

  • 0

    要从Symfony Controller中的ajax请求获取请求数据,您应该这样做:

    public function questionnaireReviewAction(Request $request, $id)
    {
    
        $form = $this->createForm(ResultOverviewType::class, $result);
        $contactForm = $this->createForm(ContactType::class, $contact);
        if ($request->isMethod('POST')) {            
            // Get data from request 
            $data = $request->getContent();
            $data = json_decode($data, true);
    
            $components = $data['components'];
            $optionalComponents = $data['optional_components'];
            ...
        }
        ... 
    }
    

相关问题