programing

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

mailnote 2023. 8. 19. 10:33
반응형

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

파이어폭스 이외의 브라우저와의 호환성을 보장하기 위해 jQuery를 사용하기 위해 javascript/php/ajax 어플리케이션을 변환하고 있습니다.

jQuery의 agax 함수를 사용하여 true, false, null 값을 전달하는 데 문제가 있습니다.

Javascript 코드:

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

PHP 코드:

var_dump($_POST);

서버 출력:

array(3) {
  ["valueTrue"]=>
  string(4) "true"
  ["valueFalse"]=>
  string(5) "false"
  ["valueNull"]=>
  string(4) "null"
}

문제는 null, true 및 false 값이 문자열로 변환되고 있다는 것입니다.

현재 사용 중인 Javascript AJAX 코드는 null, true 및 false를 올바르게 전달하지만 Firefox에서만 작동합니다.

jQuery를 사용하여 이 문제를 해결하는 방법을 아는 사람이 있습니까?


위에 제시된 작동하지 않는 코드와 비교할 작동 코드(jQuery를 사용하지 않음)가 있습니다.

Javascript 코드:

ajaxPort.send
(
   <server_url>,
   {
      valueTrue : true,
      valueFalse: false,
      valueNull : null
   }
);

PHP 코드:

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

서버 출력:

array(3) {
  ["valueTrue"]=>
  bool(true)
  ["valueFalse"]=>
  bool(false)
  ["valueNull"]=>
  NULL
}

null, true 및 false 값이 올바르게 수신됩니다.

또한 두 번째 방법에서는 $_POST 배열이 PHP 코드에서 사용되지 않습니다.저는 이것이 문제의 핵심이라고 생각하지만, 저는 jQuery를 사용하여 이 동작을 복제할 방법을 찾을 수 없습니다.


아래 답변을 수락한 후 이 섹션이 추가되었습니다.

여기 원본 코드의 수정된 버전이 있습니다.

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));

서버 출력:

array(3) {
  ["valueTrue"]=>
  bool(true)
  ["valueFalse"]=>
  bool(false)
  ["valueNull"]=>
  NULL
}

당신은 무엇을 기대합니까?이 값을 단순 텍스트 문자열인 POST 매개 변수로 보냅니다.형식 안전 전송을 원하는 경우 JSON과 같은 인코딩을 사용합니다.dataType수행 - 서버의 응답을 나타냅니다.)

null 대신 정의되지 않은 항목을 사용할 수 있습니다.

data: {
  valueTrue : true,
  valueFalse: false,
  valueNull : undefined
}

이 버그는 jQuery 1.8에서 수정되었습니다.

https://github.com/jquery/jquery/pull/714

저는 제 경험상 쿼리 매개 변수를 valueNull=dll이 아닌 valueNull=dll로 보낼 것으로 예상합니다.

JSON과 함께 REST를 수행하는 경우에도 GET에 대한 쿼리 매개 변수를 전송해야 하며 이 문제를 해결하기 위해 모든 GET을 POST로 변환해서는 안 됩니다.

언급URL : https://stackoverflow.com/questions/2794183/cannot-pass-null-to-server-using-jquery-ajax-value-received-at-the-server-is-th

반응형