2011-11-25 4 views
1

AJAX를 통해 선택한 데이터를 보내야하는 양식이 있습니다. 전체 아이디어는 양식 데이터가 선택되면 jQuery.get()을 통해 전송 된 ajax 호출은 PHP에서 데이터를 수신 및 해독하고 해당 데이터를 ID로 사용하여 데이터베이스에서 더 많은 데이터를 가져 오는 다른 함수를 호출합니다. 데이터베이스의 데이터는 다시 인코딩되고 전달 된 내용을 기반으로 더 많은 데이터를 인쇄하는 javascript 함수로 전송됩니다.Ajax가 아주 이상한 상황에서 데이터 전송을 거부합니다.

내 문제는 언제든지 $_GET 또는 $_POST을 사용하여 <?php ?> 태그를 자바 스크립트 함수로 사용하면 내 자바 스크립트 함수가 정의되지 않았다는 오류가 발생합니다. $_GET/$_POST superglobal을 제거하면 AJAX 호출이 전송되기 때문에 적어도 부분적으로는이 작동한다는 것을 알고 있습니다.

이 문제에 도움을 주시면 매우 감사하겠습니다. 난 당신이 어떻게 AJAX가 작동에 대해 혼란스러워 의심

jQuery.noConflict();   

function printSubCategories(categories) { 

    for (var i = 0; i < categories.length; i++) { 

     var opt = document.createElement('option'); 

     opt.text = categories[i]['name']; 
     opt.value = categories[i]['id']; 

     jQuery('#subcategories').append(opt); 
    }  
} 

function recieveAndPrint() { 
<?php 
    $categories = getCategories(json_decode($_GET['parent'])); 
?> 
    printSubCategories(<?=json_encode($categories)?>); 
} 

function ajaxCategories(pathToFile, ajaxData) { 
    jQuery.get(pathToFile, {'parent' : ajaxData}, function(ajaxData) { 
     //alert('Data loaded: ' + ajaxData + <?=json_encode($_POST)?>); 
    }); 

    recieveAndPrint(); 

} 
+0

동적 출력 기능에서 자바 스크립트 컴파일 오류가 발생하지 않았습니까? 이것은 확실히 당신이 묘사하고있는 행동을 일으킬 것입니까? 오류 케이스에서 js 출력을 줄 수 있습니까? – j0tt

답변

2

:

여기 내 코드입니다. 페이지가 한 번만로드되는 방식으로 AJAX 호출이 동일한 페이지에있는 PHP에서 작동 할 것으로 기대하는 것 같습니다. 정확하지 않습니다. 당신이 필요로하는 것은 원본 페이지에 JSON으로 데이터를 반환하는 서버에서 호출되는 다른 PHP 페이지입니다. receiveAndPrint()가 호출되기 전에 데이터가 준비되지 않기 때문에 콜백에 문제가 있습니다. 콜백에서 호출해야합니다 (수신 부분이 이미 완료되었으므로 그 시점에서 인쇄이됩니다).

두 개의 PHP 파일 인 a.php와 b.php가 있다고 가정 해 보겠습니다. 첫 번째 페이지는 초기 페이지를 표시하는 데 사용되고 두 번째 페이지는 parent의 특정 인스턴스에 대한 새 데이터를 검색하기 위해 호출됩니다.

a.php에이

jQuery.noConflict();   

function printSubCategories(categories) { 

    for (var i = 0; i < categories.length; i++) { 

     var opt = document.createElement('option'); 

     opt.text = categories[i]['name']; 
     opt.value = categories[i]['id']; 

     jQuery('#subcategories').append(opt); 
    }  
} 


function ajaxCategories(pathToFile, ajaxData) { 
    jQuery.get(pathToFile, {'parent' : ajaxData}, function(data) { 
     printSubCategories(data); 
    }); 
} 

또한 응답이 캐시되지 않습니다 있는지 확인 할 수 있습니다

<?php 
    $categories = getCategories(json_decode($_GET['parent'])); 
    header('Content-type: application/json'); 
?> 
<?=json_encode($categories)?> 

b.php

ajaxCategories('/b.php','value_of_parent'); 

로했다.

header('Cache-Control: no-store'); 
+0

감사합니다. 큰 도움이되었습니다. 그러나 다른 양식으로 전달 된 데이터가 전달 된 원래 양식으로 되돌아 갈 수 있어야합니다. 어떻게하면 좋을까요? b.php 파일에 ajax javascript 함수를 넣어야합니다. 그러면 a.php에 다시 인코딩 된 데이터가 전달됩니다. – zeboidlund

+0

아니요, 두 번째 PHP 파일은 데이터 만 제공합니다. 콜백 함수에서 jQuery'get' 함수에 대한 'data' 매개 변수로 수신됩니다. 클라이언트에서 호출되는 두 번째 PHP 파일의 데이터를 받아 들일 부분입니다. – tvanfosson

+0

감사합니다. 대단히 감사합니다! – zeboidlund

관련 문제