programing

jQuery Ajax의 Bool 매개 변수가 PHP에서 리터럴 문자열 "false"/"true"로 수신되었습니다.

showcode 2023. 3. 21. 22:44
반응형

jQuery Ajax의 Bool 매개 변수가 PHP에서 리터럴 문자열 "false"/"true"로 수신되었습니다.

이 질문은 다음 사항에 관한 것입니다.

jQuery AJAX를 사용하여 null을 서버에 전달할 수 없습니다.서버에서 받은 값이 문자열 "null"입니다.

하지만 그 질문의 해답은 매우 추악하기 때문에 다시 묻습니다. 그리고 저는 그것이 더 나은 해결책이라고 생각합니다.

문제
POST를 사용하여 jQuery Ajax를 사용하여 데이터를 PHP로 전송하면 false(bool) 대신 false(string), true(bool) 대신 true(true), NULL 대신 null(null) 문자열이 표시됩니다.

솔루션
(위 질문에서 제안): jQuery와 함께 전송하기 전에 데이터를 JSON으로 변환한 후 PHP로 디코딩합니다.코드 포함:

Javascript 코드:

$.ajax
(
   {
      url     : <server_url>,
      dataType: 'json',
      type    : 'POST',
      success : receiveAjaxMessage,
      data    : JSON.stringify
      (
         {
            valueTrue : true,
            valueFalse: false,
            valueNull : null
         }
      )
   }
);

PHP 코드:

var_dump(json_decode(file_get_contents('php://input'), true));

나한테는 그게 해결책이 아니라 추악한 해킹일 뿐이야

문제는 file_get_contents('php://input')를 사용하여 $_POST에 액세스할 수 없다는 것입니다.게다가 HMVC를 사용하고 있기 때문에 $_POST를 사용할 수 없습니다.

PHP에서 "false", "true" 및 "null"을 확인하거나 jQuery에서 1과 0의 instar true와 false를 전송할 수 있습니다.
하지만 이것은 매우 일반적인 문제일 것이고, jQuery는 매우 일반적인 프레임워크이기 때문에 jQuery에서 올바른 유형의 데이터를 전송하는 더 나은 우아한 방법이 있을 것입니다.

제 경험상으로는

dataType: 'json'

그리고.

contentType: 'application/json'

jQuery ajax 호출에서 데이터를 전송하기 전에 JSON.stringize를 통해 데이터가 해석 가능한 Javascript 개체로 서버에 도착합니다.내 경우 노드를 사용하고 있습니다.JS 서버사이드에서는 문자열 부울이 아닌 올바른 부울이 포함된 Javascript 개체로 도착합니다.하지만 콘텐츠 유형 속성을 생략하면 bools를 포함하여 모든 것이 엉망이 됩니다.

HTTP는 부언이나 정수의 개념이 없는 텍스트 프로토콜이기 때문에 모든 것을 문자열화해야 합니다.서버측의 문자열을 비교하는 것은, 부울에 대처하는 통상의 방법입니다.

정말로 PHP에 0 또는 1을 표시하도록 하려면

 valueTrue : true ? 1 : 0

AJAX 콜에 접속해 주세요.

저도 같은 문제에 부딪혔어요.나는 Bohans에게 1이나 0을 보내서 해결했다.

에서$.ajax했다data : {field_name: field ? 1 : 0}

컨트롤러의 모델에서 기본 부울 타입 대신 부울 오브젝트를 사용해보니 효과가 있었습니다.

나는 콘텐츠가 있다.입력: 'application/json; charset=utf-8' 및 데이터 형식을 "POST"로 입력합니다.

서버에서 유형 변환을 처리하지 않을 경우 예상한 내용을 전송해야 합니다.

대신:

     {
        valueTrue : true,
        valueFalse: false,
        valueNull : null
     }

용도:

     {
        valueTrue : 'TRUE',
        valueFalse: 'FALSE',
        valueNull : 'NULL'
     }

삼원 연산자는 꽤 명확해...

 valueTrue: (myvar ? 'TRUE' : 'FALSE')

그러나 변수에 ".toString().toUpperCase()"를 추가하는 것이 더 명확할 수 있습니다.

 valueTrue : myvar.toString().toUpperCase();

그러나 myvar가 null이면 작동하지 않습니다.

다음 예제에서는 데이터를 전송하기 전에 사용할 수 있는 변환기 함수를 보여 줍니다.

<html>
    <head>
        <script>
            function myConverter(toUpper){
                if (toUpper != null){
                   return toUpper.toString().toUpperCase(); 
                }
                return 'NULL';
            }
            //tests
            alert(myConverter(null));
            alert(myConverter(true));
            alert(myConverter(false));
        </script>
    </head>
    <body>
    </body>
</html>

언급URL : https://stackoverflow.com/questions/7408976/bool-parameter-from-jquery-ajax-received-as-literal-string-false-true-in-php

반응형