> 백엔드 개발 > PHP 튜토리얼 > PHP는 ajax 데이터를 사용하여 post_php 기술의 일반적인 방법에 대한 게시물 및 요약을 제출합니다.

PHP는 ajax 데이터를 사용하여 post_php 기술의 일반적인 방법에 대한 게시물 및 요약을 제출합니다.

WBOY
풀어 주다: 2016-05-16 20:32:32
원래의
1151명이 탐색했습니다.

이 기사의 예에서는 Ajax 데이터를 사용하여 게시물과 게시물을 제출하는 PHP의 일반적인 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 방법은 다음과 같습니다.

많은 경우 Ajax를 사용하면 문제가 없지만 때로는 불완전한 Ajax 데이터 제출 게시물의 문제가 발생합니다. 다음은 모두가 분석할 수 있는 예입니다.

다음은 표준 Ajax 요청 코드입니다. 일반적인 상황에서는 문제가 없습니다. 그러나 사용자 이름=fdas&321 또는 매개변수 값에 앰퍼샌드가 N번 나타나는 경우와 같은 특정 상황에서는 문제가 발생할 수 있습니다. 테스트 결과 데이터가 전송됐으나 인쇄된 데이터가 반쯤 잘린 것으로 확인됐다. 최종적으로 헤더 정보를 주의 깊게 관찰한 결과 전송된 헤더가 잘못된 부분이 있는 것으로 확인됐다. 문자열 접합 방법으로 인해 이 문제가 발생한다는 사실을 발견했습니다. username =fdas&321&password=password 이것은 잘못된 것입니다. 따라서 문제를 방지하려면 전송된 데이터를 {username:username,passsword:password}의 json 형식으로 변경해야 합니다!

샘플 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
$(".submit").bind('click',function (){
var 사용자 이름 = $("input[name='username']").val();
$.ajax({
url:"게시물",
유형:"게시물",
데이터 유형:"json",
데이터:"username=" 사용자 이름 "&password=" 비밀번호,
시간 초과:5000,
오류:함수(){
경고(1)
},
성공:함수(){
}
})
})

보충: POST를 통해 데이터를 제출하는 네 가지 일반적인 방법

① 애플리케이션/x-www-form-urlencoded

POST를 통해 데이터를 제출하는 가장 일반적인 방법입니다. 브라우저의 기본 양식의 경우 enctype 속성이 설정되지 않으면 결국 데이터는 application/x-www-form-urlencoded 모드로 제출됩니다. 요청은 다음과 유사합니다(이 문서에서는 관련 없는 요청 헤더가 생략됨).

코드 복사 코드는 다음과 같습니다.
POST http://www.jb51.net HTTP/ 1.1
콘텐츠 유형: application/x-www-form-urlencoded;charset=utf-8

title=test&sub[]=1&sub[]=2&sub[]=3

첫째, Content-Type은 application/x-www-form-urlencoded로 지정됩니다. 둘째, 제출된 데이터는 key1=val1&key2=val2 방식으로 인코딩되며 key와 val은 모두 URL 트랜스코딩됩니다. 대부분의 서버측 언어는 이 방법을 잘 지원합니다. 예를 들어, PHP에서 $_POST['title']은 title의 값을 얻을 수 있고 $_POST['sub']는 하위 배열을 얻을 수 있습니다.

Ajax를 사용하여 데이터를 제출할 때도 이 방법을 사용하는 경우가 많습니다. 예를 들어 JQuery 및 QWrap의 Ajax에서 Content-Type의 기본값은 "application/x-www-form-urlencoded;charset=utf-8"입니다.

② 다중 부분/양식 데이터

POST 데이터를 제출하는 또 다른 일반적인 방법입니다. 파일을 업로드하기 위해 양식을 사용할 때 양식의 암호화된 형식은 이 값과 동일해야 합니다. 요청 예시를 직접 살펴보겠습니다.

코드 복사 코드는 다음과 같습니다.
POST http://www.jb51.net HTTP/ 1.1
콘텐츠 유형:다중 부분/양식 데이터; 경계=----WebKitFormBoundaryrGKCBY7qhFd3TrwA

------WebKitFormBoundaryrGKCBY7qhFd3TrwA
내용-처리: 양식-데이터 이름="텍스트"

제목
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
콘텐츠 처리: 양식 데이터; filename="chrome.png"
콘텐츠 유형: 이미지/png

PNG ... chrome.png 내용 ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

이 예는 좀 더 복잡합니다. 먼저, 텍스트 내용과의 중복을 피하기 위해 경계를 생성하여 서로 다른 필드를 구분합니다. 그런 다음 Content-Type은 데이터가 mutipart/form-data로 인코딩되고 이 요청의 경계 내용이 무엇인지 지정합니다. 메시지 본문은 필드 수에 따라 유사한 구조를 가진 여러 부분으로 나뉩니다. 각 부분은 --boundary로 시작하고 내용 설명 정보, 캐리지 리턴, 마지막으로 필드의 특정 내용(텍스트 또는 바이너리)이 옵니다. . 파일을 전송하는 경우 파일 이름과 파일 형식 정보도 포함되어야 합니다. 메시지 본문은 --boundary-- 플래그로 끝납니다. mutipart/form-data에 대한 자세한 정의를 보려면 rfc1867을 참조하세요.

이 방법은 일반적으로 파일을 업로드하는 데 사용되며 주요 서버 언어에서도 이를 잘 지원합니다.
위에서 언급한 두 가지 POST 데이터 메서드는 브라우저에서 기본적으로 지원되며, 이 단계에서 기본 형식은 이 두 가지 메서드만 지원합니다. 그러나 점점 더 많은 웹 사이트, 특히 WebApp이 모두 데이터 상호 작용을 위해 Ajax를 사용함에 따라 새로운 데이터 제출 방법을 완전히 정의하여 개발 편의성을 높일 수 있습니다.

③ 애플리케이션/json

application/json의 Content-Type은 응답 헤더로서 모든 사람에게 확실히 친숙합니다. 실제로 점점 더 많은 사람들이 메시지 본문이 직렬화된 JSON 문자열임을 서버에 알리기 위해 요청 헤더로 사용하고 있습니다. JSON 사양의 인기로 인해 IE 하위 버전을 제외한 모든 주요 브라우저는 기본적으로 JSON.stringify를 지원합니다. 서버 측 언어에도 JSON을 처리하는 기능이 있으므로 JSON을 사용할 때 문제가 발생하지 않습니다.

JSON 형식이 단순한 키-값 쌍보다 훨씬 더 복잡한 구조화된 데이터를 지원한다는 점도 유용합니다. 몇 년 전 프로젝트를 진행했을 때 제출해야 할 데이터가 매우 심층적이어서 데이터를 JSON으로 직렬화하여 제출했던 기억이 납니다. 하지만 당시에는 JSON 문자열을 val로 사용하고 여전히 키-값 쌍에 배치하고 x-www-form-urlencoded 모드로 제출했습니다.

Google AngularJS의 Ajax 함수는 기본적으로 JSON 문자열을 제출합니다. 예를 들어 다음 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
var data = {'title':'test', '하위': [1,2,3]};
$http.post(url, data).success(함수(결과) {
...
});

보낸 최종 요청은 다음과 같습니다.
코드 복사 코드는 다음과 같습니다.
POST http://www.jb51.net HTTP/1.1
콘텐츠 유형: application/json;charset=utf-8

{"제목":"테스트","하위":[1,2,3]}

이 솔루션은 복잡한 구조의 데이터를 쉽게 제출할 수 있으며 특히 RESTful 인터페이스에 적합합니다. Chrome의 자체 개발자 도구인 Firebug, Fiddler와 같은 주요 패킷 캡처 도구는 JSON 데이터를 트리 구조로 표시하므로 매우 친숙합니다. 그러나 일부 서버 측 언어는 아직 이 방법을 지원하지 않습니다. 예를 들어, PHP는 $_POST 객체를 통해 위 요청에서 콘텐츠를 얻을 수 없습니다. 이때는 직접 처리해야 합니다. 요청 헤더의 Content-Type이 application/json인 경우 php://input에서 원래 입력 스트림을 가져온 다음 이를 객체로 json_decode합니다. 일부 PHP 프레임워크에서는 이미 이 작업을 시작했습니다.

물론 x-www-form-urlencoded를 사용하여 데이터를 제출하도록 AngularJS를 구성할 수도 있습니다.

4텍스트/xml

XML-RPC(XML Remote Procedure Call)는 앞서 언급한 바 있습니다. HTTP를 전송 프로토콜로, XML을 인코딩 방법으로 사용하는 원격 호출 사양입니다. 일반적인 XML-RPC 요청은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
POST http://www.jb51.net HTTP/ 1.1
콘텐츠 유형: 텍스트/xml


<메소드 호출>
<메소드 이름>examples.getStateName
<매개변수>
<매개변수>
41값>



XML-RPC 프로토콜은 간단하고 기능적이며 다양한 언어로 제공됩니다. 또한 WordPress의 XML-RPC Api, seo/seo.html" target="_blank">검색 엔진의 ping 서비스 등 널리 사용됩니다. JavaScript에는 여기에 데이터 처리를 지원하는 기성 라이브러리도 있습니다. Interaction은 기존 XML-RPC 서비스를 잘 지원할 수 있지만 개인적으로 XML 구조가 여전히 너무 부풀어 오르고 일반적인 시나리오에서는 JSON이 더 유연하고 편리할 것이라고 생각합니다

이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿