Ajax 객체의 일부 공통 속성, 이벤트 및 메소드의 대문자 사용에 대한 일반적인 질문 요약

亚连
풀어 주다: 2018-05-24 15:05:48
원래의
1325명이 탐색했습니다.

요즘 좀 한가해서 ajax 방식에 대해 좀 정리하는 시간을 가졌습니다. 프로젝트에서 ajax 부분의 많은 문제는 속성, 메소드, 이벤트의 대소문자 구분으로 인해 발생하며, 이로 인해 결국 프로그램 작동에 문제가 발생하는 경우가 많습니다. 여기서는 케이스에 대한 몇 가지 일반적인 문제를 소개하겠습니다. ajax 객체의 몇 가지 일반적인 속성, 이벤트 및 메서드 요약

저는 최근에 비교적 한가했기 때문에 ajax 메서드에 대한 몇 가지 내용을 정리하는 데 시간이 좀 걸렸습니다. 프로젝트를 하다 보면 ajax 부분에서 속성, 메소드, 이벤트 등의 대소문자를 구분하지 않아 문제가 발생하고, 이로 인해 프로그램 운영에 문제가 발생하는 경우가 많습니다.

 다음은 ajax 객체의 몇 가지 일반적인 속성, 이벤트 및 메서드입니다

 1) 표준 ajax 객체의 속성에는 ReadyState, status, responseText, responseXML이 포함됩니다.

 2) IE 브라우저의 경우 비표준 ajax 객체 속성, responseBody, 바이너리 데이터 스트림이 있습니다. 브라우저 호환성을 고려하지 않는 경우 이 속성 + VBScript를 사용하면 문자 깨짐 문제를 매우 잘 해결할 수 있습니다.

Visual Basic 코드

Function Bytes2BStr(vin)'二进制转字串
   strreturn = ""
   for i = 1 to lenb(vin)
   thischarcode = ascb(midb(vin,i,1))
   if thischarcode < &h80 then
    strreturn = strreturn & chr(thischarcode)
   else
    nextcharcode = ascb(midb(vin,i+1,1))
    strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    i = i + 1
   end if
   next
   Bytes2BStr = strreturn
End Function
로그인 후 복사

 3) 이벤트 onreadystatechange, 상태 전이 기능

  4) 메소드에는 제출 메소드 지정 시 응답 헤더를 설정하는 데 사용되는 setRequestHeader, open, send가 포함됩니다. POST 로 콘텐츠 유형을 application/x-www-form-urlencoded로 설정해야 합니다. 이 응답 헤더가 설정되지 않으면 요청된 동적 페이지는 키-값 쌍 형식으로 값을 얻을 수 없지만 제출된 데이터는 바이너리 스트림에서 생성될 수 있습니다.

Reference

Ajax를 post로 지정했지만 content-type이 설정되지 않았거나 키가 지정되지 않은 경우 제출된 콘텐츠를 가져오는 방법

  오류가 발생하기 쉽습니다

1) 다음을 사용하여 생성된 객체의 경우 IE7+를 포함한 XMLHttpRequest의 속성은 대소문자를 엄격하게 구분합니다. 그렇지 않으면 속성 값이 정의되지 않습니다. 예를 들어, ReadyState는 ReadyState로 작성되고 responseText는 responsetext로 작성됩니다.

2) IE 브라우저의 경우 activexobject가 먼저 판단되면 activexobject가 실행되어 xhr 객체가 생성됩니다. acx를 사용하여 생성된 xhr 객체, 속성, 이벤트 및 메서드는 대소문자를 구분하지 않습니다

3) XMLHttpRequest를 사용하여 생성하는 경우 , onreadystatechange 모두 소문자여야 합니다. 그렇지 않으면 실제 상태 전환 함수가 아닌 xhr 객체에 사용자 정의 속성을 할당하는 것과 같습니다. 이렇게 하면 콜백이 실행되지 않습니다. IE에서 activexobject를 사용하여 생성한 xhr 객체의 경우 대소문자를 구분하지 않습니다

4) 2번과 3번과 마찬가지로 XMLHttpRequest가 생성될 때 호출 메서드는 대소문자를 구분해야 합니다. 그렇지 않으면 오류와 프롬프트가 표시되지 않습니다. 방법을 찾을 수 없습니다. IE는 activexobject를 사용할 때 대소문자를 구분하지 않습니다.

setRequestHeader 메소드가 실행되기 전에 open 메소드를 호출해야 한다는 점이 특히 강조됩니다. 그렇지 않으면 오류가 발생하지 않습니다.

 손으로 쓴 ajax 코드에 대한 몇 가지 제안

1) get을 위해 제출할 때 해당 데이터 형식을 생성하기 위해 확인해야 하는 일부 파일에 대한 요청이 아닌 이상 콘텐츠 유형을 설정할 필요가 없습니다. 예를 들어 asp.net의 웹 서비스는 콘텐츠 유형을 확인합니다. 콘텐츠 유형이 application/json으로 지정되면 해당 json 형식 문자열이 생성됩니다.

2) get으로 제출할 때 데이터가 없으면 send 메소드 호출 시 매개변수로 null을 추가하는 것이 가장 좋습니다. xhr.send(null);

3) 게시물을 제출할 때 open 메소드를 호출한 후 setRequestHeader 메소드를 호출하여 content-type을 application/x-www-form-urlencoded로 설정하는 것을 잊지 마세요. responseText , responseXML 및 responseBody [IE만 해당], 상태 속성을 사용하면 ReadyState==4, status ==200 [온라인 테스트] 또는 status ==0 [로컬 테스트]일 때 사용해야 합니다.

JavaScript 코드

 var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
   xhr.open(&#39;get&#39;, &#39;index.html&#39;, true);
   xhr.onreadystatechange = function () {
     if (4 == xhr.readyState) {
       if (200 == xhr.status || 0 == xhr.status) {
         //=========正常返回后的处理代码
       }
       else alert(&#39;动态页出问题了~~&#39;);
     }
   }
   xhr.send(null);
로그인 후 복사

5) 비동기적으로 실행되는 경우에는 상태 전환 함수를 추가한 후 ReadyState 비트가 4일 때 responseText 또는 responseXML 속성을 사용해야 합니다.

동기적으로 실행된다면 전송 후 바로 responseText나 responseXML 속성을 사용하면 됩니다. onreadystatechange 상태 전환 기능을 추가할 필요가 없습니다. 그러나 동기화 중에 네트워크 속도가 느리면 브라우저가 정지되기 쉽고 사용자 경험이 좋지 않습니다.


6) 가장 쉬운~~호호~~대신 jquery 프레임워크를 사용하세요.

위 내용은 제가 여러분을 위해 정리한 내용입니다. 앞으로 도움이 되길 바랍니다.

관련 기사:

Ajax 요청 보내기 및 받기


ajax 비동기 로딩 이미지 예제 분석


AJAX XMLHttpRequest 개체 자세한 설명


위 내용은 Ajax 객체의 일부 공통 속성, 이벤트 및 메소드의 대문자 사용에 대한 일반적인 질문 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!