2010-07-20 7 views
0

일부 값으로 POST 요청을 PHP로 보내는 AJAX 스크립트가 있습니다. PHP에서 값을 가져 오려고하면 아무 것도 얻을 수 없습니다.AJAX POST 및 PHP

아약스 스크립트가

xmlhttp.open("POST","handle_data.php",true); 
xmlhttp.setRequestHeader("Content-type","text/plain"); 
var cmdStr="cmd1=Commanda&cmd2=Command2"; 
xmlhttp.send(cmdStr); 
alert(xmlhttp.responseText); 

PHP 스크립트는 출력 그냥 일반 빈 경고 상자입니다

<?php 
    echo $_POST['cmd1']; 
?> 

입니다. 코드에 실수가 있습니까?

답변

3
xmlhttp.onreadystatechange = function() 
{ 
    if(this.readyState == 4 && this.status == 200) 
    { 
     if(this.responseText != null) 
     { 
      alert(this.responseText); 
     } 
    }; 
} 

당신은 콜백을 위임 할 onreadystatechange를 사용하여 수신 할 데이터를 기다릴 필요가있다.

http://www.w3.org/TR/XMLHttpRequest/

+0

안녕하세요, 지금 오류 메시지가 표시됩니다.
Notice: Undefined index: cmd1 in C:\wamp\www\Filehand\handle_data.php on line 2
Rajkumar

+0

@Rajkumar : Ajax 요청을 망칠 것이므로'text/plain' 요청 헤더를 보내지 마십시오. – BoltClock

+0

@BoltClock, 문자열을 보내야한다면 올바른 콘텐츠 유형을 알려주시겠습니까? – Rajkumar

0

요청을 보낸 후에 즉시의 응답을 가져 오지 않아야합니다. 그 이유는 Ajax의 A가 Asynchronous를 의미하기 때문입니다. 브라우저가 XMLHttpRequest가 완료 될 때까지 기다리지 않고 JavaScript 코드를 계속 실행하기 때문입니다.

대신 응답이 완전히 준비되었을 때만 실행되는 콜백을 작성해야합니다. 그냥 xmlhttp.send(cmdStr); 호출하기 전에,이 추가

xmlhttp.onreadystatechange = function() 
{ 
    if (this.readyState == 4 && this.status == 200) 
    { 
     // This line is from your example's alert output 
     alert(this.responseText); 
    } 
} 
+0

익명 함수 내에서'xmlhttp' 대신'this'를 사용해야합니다. – RobertPitt

+0

@RobertPitt : 고마워, 대답을 수정했다. – BoltClock

1
이 필요한 경우 나도 몰라

,하지만 당신은 요청 헤더로 application/x-www-form-urlencoded을 사용할 수 있습니다.

+0

그럴 필요는 없습니다. – RobertPitt