javascript
  • php
  • html
  • ajax
  • 2014-06-19 3 views 0 likes 
    0

    ajax를 통해 변수 의 값을 PHP 스크립트로 보내려고합니다. 그러나 PHP 스크립트는 브라우저를 열 때 원하는 출력을 인쇄하지 않습니다. 시도했지만 여기에 뭐가 잘못 찾을 수 없습니다. 포인터가 있습니까?Ajax에서 PHP로 데이터가 전달되지 않는 데이터

    index.html을

    <button type="submit" class="btn btn-success" id = 'first' onclick='process();'>Submit</button> 
    
    <script> 
    
    var number = 0; 
    
    function process() 
    { 
        number++; 
    
        var xhr; 
    
        if (window.XMLHttpRequest) { 
         xhr = new XMLHttpRequest(); 
        } else if (window.ActiveXObject) { 
         xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
        } 
    
        var data = "num=" + number; 
        xhr.open("POST", "index.php", true); 
        xhr.send(data); 
    }  
    </script> 
    

    index.php를

    <?php 
    session_start(); 
    $number = $_POST['num']; 
    $_SESSION['numb'] = $number; 
    echo $_SESSION['numb'] ; 
    ?> 
    
    +0

    가 어떻게 출력을 확인 후이 코드

    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.setRequestHeader("Content-length", data.length); xhr.setRequestHeader("Connection", "close"); 

    ? 동일한 PHP를 일반 GET 요청으로 다시 열면 이전 번호를 덮어 씁니다. – Pietu1998

    +2

    Javascript 콘솔에서 오류를 확인하십시오. 함수에 대한 닫는 중괄호가 없으므로 실행되지 않습니다. – Barmar

    +1

    그럼, 당신은'$ _POST'에'isset()'을 사용하지 않으므로 직접 페이지 reuqest에서'$ _SESSION'을'false'로 설정하고 에코는 비어 있습니다. – Ohgodwhy

    답변

    0

    당신이 가까운 곱슬 브래킷을 고정하기 때문에 내 긴 숨이 절름발이 대답을 편집 ...하지만 bloodyKnuckles 당신은 또한 권리입니다 '프로세스'함수에서 PHP 페이지의 응답을 받아서 출력하거나 ... 원하는 것을 무엇이든 필요로합니다. 기본적으로 XMLHttpRequest 객체에서 'onreadystatechange'메소드를 사용하고 'readyState'속성 값 4를 찾아 모든 것이 완료되었음을 확인할 수 있습니다. 다음은 콘솔에 결과를 출력하는 간단한 예제입니다 (브라우저에서 개발자 도구를 사용하여 볼 수 있음).

    <script> 
    
    var number = 0; 
    
    function process() 
    { 
    number++; 
    
    var xhr; 
    
    if (window.XMLHttpRequest) { 
        xhr = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
        xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    
    var data = "num=" + number; 
    xhr.onreadystatechange = function(){    
    
        if (xhr.readyState==4 && xhr.status==200){ 
          console.log('xhr.readyState=',xhr.readyState); 
          console.log('xhr.status=',xhr.status); 
          console.log('response=',xhr.responseText);    
        } 
    
        else if (xhr.readyState == 1){ 
        xhr.send(data) 
    
        } 
    
    }; 
    
    xhr.open("POST", "ajax-test.php", true); 
    
    } 
    </script> 
    

    더 나아가 POST 값이있을 때만 세션을 업데이트하도록 PHP 페이지를 업데이트 할 수 있습니다.

    <?php 
    //ini_set('display_errors',1); 
    //ini_set('display_startup_errors',1); 
    //error_reporting(-1); 
    if(isset($_POST['num'])){ 
          session_start(); 
        $_SESSION['numb'] = $_POST['num']; 
        echo $_SESSION['numb']; 
    } 
    ?> 
    

    해당 ini_set 및 error_reporting 행의 주석 처리를 제거하여 PHP 스크립트의 상황을 파악할 수 있습니다.

    +1

    그는 몇 분 전에 질문을 편집 할 때 닫기 괄호를 추가했습니다. – Barmar

    +0

    고마워요. cconsole에 출력 했습니까? index.html에 요청 내용 유형을 추가하고 index.php의 $ _POST에 isset()을 사용했습니다. 이제 작동합니다. –

    0

    당신이 요청 헤더 정보를 전송하지 않기 때문에 이것은 ...

    추가]

    xhr.open("POST", "index.php", true); 
    
    +0

    고마워요. index.html에 요청 내용 유형을 추가하고 index.php의 $ _POST에 isset()을 사용했습니다. 이제 작동합니다. –

    관련 문제