2010-02-25 6 views
3

이 문제를 해결하는 데 어려움이 있습니다. 내가 무엇을 시도하든 상관없이, PHP는 항상 빈 배열을 반환합니다. 여기 내 주요 파일 (index.php를)의 코드입니다 : "링크"PHP 서버의 JSON 데이터 응답이 비어 있습니다.

<script language="javascript" type="text/javascript"> 

$(document).ready(function(){ 

    $(".ajaxlink").click(function() { 
    callServer(); 
    return false; //Stop link from redirecting 
    }); 

}); 

var test = { "testName": "testValue" } 
var testJSON = JSON.stringify(test); 

function updatePage(data) { 
    document.getElementById("testDiv").innerHTML = data; 
} 

function callServer() { 
$.ajax({ 
    type: "POST", 
    url: "ajax/server.php", 
    data: testJSON, 
    success: function(data) { 
    updatePage(data); 
    }, 
    //Upon error, output message containing a little info on what went wrong 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
    alert('An Ajax error occured\ntextStatus = ' + textStatus + '\nerrorThrown = ' + errorThrown + '\nstatus = ' + XMLHttpRequest.status); 
    } 
}); 
} 

</script> 

<div id="testDiv">Something here</div> 

<a href="test1.htm" class="ajaxlink">Link!</a> <br> 

은 기본적으로 당신이를 클릭 callServer() 함수를 실행이. 그런 다음 테스트 json 데이터, 즉 { "testName": "testValue"}를 server.php로 보냅니다. Firebug는 json-data가 실제로 server.php로 전송되었다고보고합니다.

내 server.php은 다음과 같습니다

Array 
(
) 
아약스 함수의 데이터 타입이 정의되지 않은

, 그래서 어떤 출력 서버 :

<?php 

print_r($_POST); 

?> 

이이 (가) testDiv에서 다음을 반환 .php 파일이 뱉어지면 읽을 수 있어야합니다. 필요한 모든 라이브러리 (json, jquery)가 내 문서에도 포함되어 있습니다. 저는 Apache 2.2와 PHP 5.3.1에서 이것을 실행하고 있지만 웹 서버 (수천 개의 웹 사이트를 호스트하는 호스트)에 똑같은 내용을 보여줍니다. 요청 헤더에 사용 된 content-type은 'application/x-www-form-urlencoded; charset = UTF-8 '이 올바르게 작동해야합니다.

감사합니다. 감사합니다. soren

답변

3

난 당신이 잘못된 방식으로 데이터를 보낼 생각합니다. testName=testValue과 같은 문자열을 보내거나 test의 값을 의 data 매개 변수에 직접 할당하고 stringify 메서드를 사용하지 마십시오.

'{ "testName": "testValue" }'

을하지만, 이것은 유효한 매개 변수 문자열되지 않습니다 : 당신이 stringify를 사용하는 경우, 실제 전송 된 데이터가 될 것입니다 때문에

(I 가정, 나는 확실히 여기 아니다).

그것은

'testName=testValue'

그래서 직접 .ajax() 적절한 객체를 스트링으로 변환합니다 test를 사용하는 형식이어야합니다 당신의 PHP에서 난 당신의 출력 확실하지 않다

function callServer() { 
$.ajax({ 
    type: "POST", 
    url: "ajax/server.php", 
    data: test, 
    success: function(data) { 
    updatePage(data); 
    }, 
    //Upon error, output message containing a little info on what went wrong 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
    alert('An Ajax error occured\ntextStatus = ' + textStatus + '\nerrorThrown = ' + errorThrown + '\nstatus = ' + XMLHttpRequest.status); 
    } 
}); 
} 
+0

여기에 동의 ... 당신 stringify 필요가 없습니다. JSON으로 데이터를 보내면됩니다. 테스트 변수를 testJSON 대신 데이터로 저장하십시오. – Lindsay

+0

Firebug가 JSON 데이터를 올바르게 보내고 있다고 말합니다. 내 js의 'test'도 객체처럼 작동합니다. –

+0

추가 테스팅이 끝나면 !!!!! 너무 많이 고마워요 –

0

firefox 및 Live Http 헤더 확장을 사용하십시오.
문제가있는 곳을 정확히 볼 수 있습니다.
PHP 또는 Js 코드.

live http headers

+0

다음과 같은 결과가 나옵니다. http://pastebin.org/97270 나에게 맞는 것 같아요. –

+0

아니야, 다음과 같아야합니다. from { "testName": "testValue"} 마녀가 testName에게 내 의견으로는 잘못되었습니다. = testValue – DCC

0

스크립트는 JSON 형식입니다.

PHP의 최신 버전을 사용하고 있다면 (현재있는 경우) json_encode 및 json_decode 함수에 액세스 할 수 있습니다.대신 일을 :

print_r($_POST); 

시도 :

print json_encode($_POST); 

PHP 버전은 인코딩하기 위해 당신은 젠드 프레임 워크에서 Zend_Json 클래스로 라이브러리를 사용하여 이러한 기능을 가지고 있지 않은 경우 PHP 변수를 출력하기 전에 JSON으로 PHP 변수를 수정하십시오.

다시 돌아 오면 JSON 형식의 문자열이됩니다. jQuery.ajax 호출에서 dataType을 설정하면 JS 객체로 평가해야합니다. 그렇지 않다면 Javascript 평가 함수를 호출하거나 JSON.parse (데이터)를 사용하는 것이 좋습니다.

+0

$ _POST 대신 $ _POST로 코드를 수정했습니다. 그러면 다음과 같은 []을 출력합니다. –

관련 문제