마 젠토 2 : Ajax 양식을 사용하여 사용자 정의 양식으로 데이터를 보내는 방법은 무엇입니까?


11

누구든지 Magento-2 페이지에서 Ajax를 사용하여 데이터를 보내는 간단한 양식을 만드는 방법을 설명 할 수 있습니까? 이미 ajax를 사용하지 않고 데이터를 보내는 양식 및 컨트롤러 작업이 있습니다.


이 링크는 여기
Pankaj Sharma

내 답변을 봐, 그것은 받아 들일 수있는 것보다 더 도움이 될 수 있습니다
LucScu

응답에 오류 표시> 정의되지 않은 속성 :> namespace \ modulename \ Controller \ Index \ Index \ Interceptor :: $ _ jsonHelper 답변을 개선하기 위해 공유하십시오
Rohit Chauhan

답변:


16

ajax를 사용하기 위해 phtml 파일에서 아래 코드를 설정할 수 있습니다. 아래 코드에서 customurl 을 변경해야 합니다.

<script type="text/javascript">
    require(["jquery"],function($) {
        $(document).ready(function() {
            var customurl = "<?php echo $this->getUrl().'frontname/index/index'?>";
            $.ajax({
                url: customurl,
                type: 'POST',
                dataType: 'json',
                data: {
                    customdata1: 'test1',
                    customdata2: 'test2',
                },
            complete: function(response) {             
                country = response.responseJSON.default_country;
                state = response.responseJSON.state;         
                console.log(state+' '+country);   
                },
                error: function (xhr, status, errorThrown) {
                    console.log('Error happens. Try again.');
                }
            });
        });
    });
</script>

컨트롤러 파일 execute () 메소드 내에서

<?php
 use Magento\Framework\Controller\ResultFactory;
 public function execute()
    {
        $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);

        $response = $this->resultFactory->create(ResultFactory::TYPE_RAW);
        $response->setHeader('Content-type', 'text/plain');
        $country = 'india';
        $state = 'gujarat';
        $response->setContents(
            $this->_jsonHelper->jsonEncode(
                [
                    'default_country' => $country,
                    'state' => $state,
                ]
            )
        );
        return $response;
    } 

4
$ this-> getRequest ()-> getParam ( 'customdata1');을 사용하여 컨트롤러에서 데이터를 얻을 수 있습니다.
Rakesh Jesadiya

1
응답이 스크립트 응답에 있습니다.
Rakesh Jesadiya

2
완료 : 기능 (응답) 여기에 응답이 있습니다.
Rakesh Jesadiya

1
위의 $ this-> _ jsonHelper-> jsonEncode ([ 'default_country'=> $ country, 'state'=> $ state,]) 코드에서 응답을 설정해야합니다
Rakesh Jesadiya

1
상기 케이스 default_country 및 상태 응답에서 반환되어
케쉬 Jesadiya

13

허용되는 답변은 좋지만 magento 코어가 제공하는 js 유효성 검사를 활용할 수 있다고 생각합니다. 따라서 아래 js 스크립트를 사용하십시오.

<script type="text/javascript">
require([
    "jquery",
    "mage/mage"
],function($) {
    $(document).ready(function() {
        $('#form_id').mage(
            'validation',
            { 
                submitHandler: function(form) {
                    $.ajax({
                        url: "url to module/controller/action",
                        data: $('#form_id').serialize(),
                        type: 'POST',
                        dataType: 'json',
                        beforeSend: function() {
                            // show some loading icon
                        },
                        success: function(data, status, xhr) {
                            // data contains your controller response
                        },
                        error: function (xhr, status, errorThrown) {
                            console.log('Error happens. Try again.');
                            console.log(errorThrown);
                        }
                    });
                }
            }
        );
    });
});
</script>

컨트롤러는 다음과 같은 JSON 응답을 반환해야합니다.

$response = $this->resultFactory
    ->create(\Magento\Framework\Controller\ResultFactory::TYPE_JSON)
    ->setData([
        'status'  => "ok",
        'message' => "form submitted correctly"
    ]);

return $response;

1
허용 된 답변보다 더 나은 솔루션. 고마워요
메디나
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.