>source

CodeIgniter에서 컨트롤러 파일로 Ajax로 값을 보내려고합니다. 성공 없이는 해당 문제를 검색했습니다. 이제이 질문은 여기에서 여러 번 만들어 지지만 여전히 SULTION을 찾을 수 없습니다. 나를 도와 줄 수 있니. 감사 !

JS 파일.

function submitSend()
{
    var message= $('#sms').val();
    if(message== "")
    {
      $("#sms").attr("placeholder", "Type a message please...");
      return false;
    }
    $.ajax(
    {
      url: "<?php echo base_url();?>/mychat/send",
      type: 'POST',
      data:{
              '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>',
              'message': message
             },
      success: function (data)
      {
       window.console.log('Successful');
      },
      error :function(data)
      {
      window.console.log('Failed');
      }
    });
}

컨트롤러 기능입니다. MyChat이라는 파일에 있습니다.

public function send()
  {
     $message= $this->input->post('message');
     echo $message;
  }

그리고 당신이 얻는 모든 것은 403입니다. 어떤 오류 메시지가 표시됩니까?

Alex2021-04-20 10:34:08

이 링크를 통해 내 관련 답변을 확인할 수 있습니다.

lothux19872021-04-20 10:34:08

@Alex는 이제 오류를 표시하지 않지만 컨트롤러 파일에서 'echo $ 메시지가 표시되는지 확인하십시오. Dessage 변수가 컨트롤러 파일에 전달되지 않습니다.

Armand Rexhmati2021-04-20 10:34:08

@ Lothux1987 귀하의 답변을 보았습니다. 내 JS code는 지금 괜찮습니다. 그러나 변수 메시지는 컨트롤러 파일로 전달되지 않습니다.

Armand Rexhmati2021-04-20 10:34:08

DevTools를 확인하여 게시 된 내용을 확인하십시오.

Alex2021-04-20 10:34:08
  • 답변 # 1

    JS 파일을 포함하여 바닥 글보기 에이 code를 추가하십시오.

    <?php $CI=&amp;
     get_instance(); ?><script>    var csrf_name= '<?php echo $CI->security->get_csrf_token_name(); ?>';
        var csrf_hash= '<?php echo $CI->security->get_csrf_hash(); ?>';
    </script>

    이들을이 변수로 전화하면

    data:{
         csrf_name : csrf_hash,
         'message': message
    },
    

    재생을 주셔서 감사합니다. 나는이 메소드를 시도했지만 작성하지는 않습니다. view file.but 안에 JS 함수가 포함 된 경우에만 오류가 제거됩니다. '메시지'변수가 컨트롤러 파일로 전송되지 않습니다.

    Armand Rexhmati2021-04-20 10:34:08

    는 AJAX 함수에서 URL로 호출합니다. base_url + "/mychat /send",

    Umar Khan2021-04-20 10:34:08

    여전히 같은 문제.

    Armand Rexhmati2021-04-20 10:34:08

    구성 파일 $ config [ 'csrf_protection']= true; $ config [ 'csrf_regenerate']= true; $ config [ 'global_xss_filtering']= true;

    Umar Khan2021-04-20 10:34:08

    OK 바닥 글에서 사용하십시오 $ CI= &get_instance (); //codeigniter 참조 인스턴스를 만듭니다. $ this->보안 ->$ CI->보안 -사용 대신

    Umar Khan2021-04-20 10:34:08
  • 답변 # 2

    이 작업을 수행합니다.

    /app/config/security.php

    /**
         * --------------------------------------------------------------------------
         * CSRF Token Name
         * --------------------------------------------------------------------------
         *
         * Token name for Cross Site Request Forgery protection cookie.
         *
         * @var string
         */
        public $tokenName= 'csrf_token_name';
    

    내 양식 내부

    <input type="hidden" name="<?= csrf_token() ?>" value="<?= csrf_hash() ?>" />

    script.js

    var tokenHash=jQuery("input[name=csrf_token_name]").val();
    $.ajax({
      method: "POST",
      url: "/somecontroller",
      data: { name: "John", location: "Boston" },
    beforeSend: function (xhr)
            {
            xhr.setRequestHeader('X-CSRF-Token' , tokenHash);
            },
    })
      .done(function( msg ) {
        console.log( "Data Saved: " + msg );
      });
    

  • 답변 # 3

    JS 파일에서 PHP 태그를 사용할 수 없습니다.

    url: "<?php echo base_url();?>/mychat/send", //this line in js file is wrong
    

    다음과 같은 .php 파일의 스크립트 태그에서만 PHP 태그 만 사용합니다.

    <script> //... some code here
         url: "<?php echo base_url();?>/mychat/send",
     //... some code here
    </script>

    또는 헤더 HTML 에이 행을 추가하십시오.

    <script>    var BASE_URL= '<?php echo base_url(); ?>';
    </script>

    및 JS 파일에서 사용하십시오

    ....
    url: BASE_URL+"mychat/send",
    ....
    

  • 답변 # 4

    CSRF 토큰으로 인해 CSRF를 사용하지 않으려면 CSRF로 인해 CSRF로 인해 CSRF 구성의 특정 기능을 확인하십시오.

  • 답변 # 5

    나는 당신이 사용할 수없는 것을 두려워합니다PHP.태그자바 스크립트파일을 언급 한 것처럼 A.JS.파일.

    당신은 당신을 운영해야합니다PHP..php 파일의 code.

    아마도 당신은 당신을 분리 할 수 ​​있습니다Submutsend ()조금 기능하고 그를 추출하여 더 모듈 식으로 만드십시오.PHP.태그뿐만 아니라$ ( 'sms'). val ()...에 이들은 기능을 라고 부르는 매개 변수로 함수에 전달 될 수 있습니다 (.php.파일) .

  • 이전 Access 365 양식 언 바운드 텍스트 상자 항목이 모든 레code에서 입력을 반복합니다.
  • 다음 Android Launcher 앱 아이콘 시장 업데이트 후에 새로운 아이콘으로 업데이트되지 않음