2011-09-13 6 views
4

"Hello World!"를 얻는 방법을 모른다. 다음 Javascript 코드에 대한 PHP에서.
콘텐츠 유형이 "application/x-www-form-urlencoded"이었지만 "text/plain"이 아닌 경우 $ _POST [ '']를 사용할 수 있음을 알고 있습니다.PHP에서 XMLHttpRequest의 send() 메서드의 text/plain 값을 얻는 방법

var xhr = new XMLHttpRequest(); 
xhr.open('POST', 'example.php', true); 
xhr.setRequestHeader('Content-Type', 'text/plain'); 
xhr.send('Hello World!'); 

답변

4

을 시도 할 수 있습니다. application/x-www-form-urlencoded을 사용하지 않고 ’ 개의 POST 데이터를 사용할 수 있습니다. 둘째, “ Hello World! ”은 이스케이프되거나 변수에 연결되지 않습니다.

다음은 서버에 POST 데이터의 자바 스크립트 코드입니다.

var xhr = new XMLHttpRequest(); 
var params = 'x='+encodeURIComponent("Hello World!"); 
xhr.open("POST", 'example.php', true); 
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xhr.setRequestHeader("Content-length", params.length); 
xhr.setRequestHeader("Connection", "close"); 
xhr.onreadystatechange = function() { 
    if(xhr.readyState == 4 && xhr.status == 200) { 
     alert(xhr.responseText); 
    } 
} 
xhr.send(params); 

PHP에서는 $_POST['x']으로 액세스 할 수 있습니다.

또는 다음 코드를 사용하여 $_GET['x']을 사용하십시오.

var xhr = new XMLHttpRequest(); 
var params = encodeURIComponent("Hello World!"); 
xhr.open("GET", 'example.php?x='+params, true); 
xhr.onreadystatechange = function() { 
    if(xhr.readyState == 4 && xhr.status == 200) { 
     alert(xhr.responseText); 
    } 
} 
xhr.send(null); 

더 많은 것은 Content-type: text/plain을 사용하는 아이디어와 일치합니다.

+0

이것은 내가 알고 싶었던 전부입니다 :) 감사합니다. – abc

+1

@genkidesu : 당신이 여기 새로 왔음을 알았습니다. 이 사이트에서 도움이되는 답변을 수락하는 것이 관례입니다. 그렇지 않으면 사람들은 앞으로 발생할 수있는 질문에 대답하기를 꺼리게됩니다. – Herbert

+0

@ abc 허버트 답장을 수락 한 것으로 표시해야합니다. 안녕 허버트 (Herbert Herbert)는 내가 성공하지 못한 채로 [w3school] (https://www.w3schools.com/js/tryit.asp?filename=tryjs_ajax_post2)에 성공한 성명서를 보내 주셔서 감사합니다. 불완전하다. (어떻게 작동하는지 궁금하다.) – Robert

7

이 PHP는 요청 본문의 원시 데이터를 읽습니다 :

$data = file_get_contents('php://input'); 

라인을 3 :

xhr.setRequestHeader('Content-Type', 'text/plain'); 

는 일반 텍스트 콘텐츠 유형을 설정합니다 일반 텍스트 /를 올리기로 필요하지 않습니다 ; charset = UTF-8
http://www.w3.org/TR/XMLHttpRequest/#the-send-method

+0

"올바른"표준 관행은 항상 양식 데이터를 올바르게 형식화하는 것에 동의하지만 "php : // input"비트는 주목할 가치가있는 흥미로운 세부 사항이다. 그것에 대한 더 자세한 정보는 웹 검색에서 찾을 수 있습니다 : [link] (http://www.google.com/search?q= "php : // input") –

+0

POST 데이터를 보내는 데 문제가있는 곳은 어디입니까? 일반 텍스트? HTTP 표준은 POST 데이터가 "application/x-www-form-urlencoded"이어야한다는 것을 결코 읽지 못했습니다. PHP와 브라우저가 HTTP보다 한 단계 높은 수준으로 통신하는 데 사용됩니다. – fishbone