2013-08-13 7 views
0

jQuery와 PHP를 함께 사용하는 방법을 배우고 있습니다. 이것은 나의 첫 번째 시도이며, 나는 거의 개념을 얻고있는 것처럼 느낍니다. 그러나 내가 언급하지 못한 문제가 있습니다. 나는 다음과 같은 오류가, PHP 스크립트에 JSON 객체를 게시하고 매개 변수 중 하나를 반환 할 때 :JSON을 PHP로 보내고 응답 받기

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="http://code.jquery.com/jquery-git2.js"></script> 
     <meta charset=utf-8 /> 
     <title>JS Bin</title> 
     <style id="jsbin-css"></style> 
    </head> 
    <body> 
     <button onClick="postData();">Submit me!</button> 
     <script> 
      function postData() { 
       var myData = { 
        'firstName' : 'John', 
        'lastName' : 'Doe' 
       }; 

       $.ajax({ 
        type: "POST", 
        url: "postData.php", 
        contentType: "application/json", 
        data: myData, 
        success: function(msg){ 
         alert(msg); 
        }, 
        error: function(err) { 
         alert('error!' + err); 
        } 
       }); 
      } 
     </script> 
    </body> 
</html> 
:

된 index.html을 "의 ... 비 개체의 속성을 얻으려고 노력"

postData.php : 배열이 아닌 오브젝트를 반환에 디폴트 (PHP 버전에 따라)

<?php 
    $input = file_get_contents('php://input'); 
    $jsonData = json_decode($input);  
    $output = $jsonData->{'firstName'}; 
    echo $output; 
?> 
+0

서버에 json 문자열을 수신하고 있습니까? JSON 텍스트를 실제로 보내려면 jquery에 말하지 않았고, 단지 보통의 POST 폼 제출을하기 위해서입니다. 'var_dump ($ input)'은 어떻게 생겼는가? –

답변

0

json_decode.

$output = $jsonData['firstname']; 

당신은 또한 연관 배열을 반환 할 수 있습니다, 그래서 json_decode의 두 번째 인수로 true을 통과 : 적절한 방법이 될 것 액세스 할 수 있습니다. 교대로 발생 될 수있는 어떤

$jsonData = json_decode($input, true); 

은 JSON이있는 경우 PHP는 null를 반환 잘못된 것입니다. 다음을 확인할 수 있습니다 :

if ($jsonData = json_decode($input, true) === null) { 
    // Do stuff! 
} else { 
    // Invalid JSON :(
} 
+0

코드를이 코드로 변경했지만 'firstName is :'(실제로는 firstName의 빈 문자열 unstead)를 반환합니다. JSON 형식의 오류! " string, firstName이 null 인 경우를 제외하고는 'correct'문자열을 얻습니다. 매우 이상합니다. 코드는 다음과 같습니다. ' ' –

+0

흠, 이상 하네. 성공 블록에서'print_r ($ output)'을 실행하고 입력을 가져올 때'echo ($ input)'를 실행 해보십시오. 입력 내용이 이상합니다. –

+0

'$ output = print_r ($ input);'경고는 다음과 같습니다 :'firstName = John & lastName = Doe1' 문자열에 '1'이있는 이유는 무엇입니까? –

0

jquery의 기능 게시로 좀 더 간단하게 입력했습니다.

먼저 HTML과 JS가 :

<!DOCTYPE html> 
     <html> 
     <head> 
     <script src="http://code.jquery.com/jquery-git2.js"></script> 
     <meta charset=utf-8 /> 
     <title>JS Bin</title> 
     <style id="jsbin-css"> 
     </style> 
     </head> 
     <body> 
     <button onClick="postData();">Submit me!</button> 
     <script> 
     function postData() { 
     $.post(
      "postData.php", 
      { 
       firstName : 'John', 
       lastName : 'Doe' 
      }, 
      function(msg) 
      { 
       alert(msg); 
      } 
     ); 
     } 

     </script> 
     </body> 
     </html> 

은 다음 PHP : 조금 더 많은 작업과 함께

<?php 
    echo $_REQUEST['firstName']." - ".$_REQUEST['lastName']; 
?> 
1

, 당신은 REST 클라이언트를 사용하여이를 달성 할 수 나는 당신이 도움이 되었기를 바랍니다 그것은 다른 것들 중에서 데이터 유형 변환과 URL 구문 분석을 자동으로 처리합니다.

는 REST 아키텍처를 사용의 장점 중 일부를 이름을 지정하려면 :

  • 단순합니다.

  • 당신은 쉽게 캐싱을 사용하여 솔루션을 확장 할 수 있습니다,로드 밸런싱 등

  • 은 논리적 URL-엔드 포인트를 분리 할 수 ​​있습니다.

  • 클라이언트를 변경하지 않고도 구현을 쉽게 변경할 수있는 유연성을 제공합니다.

A Brief Introduction to REST을 읽고 디자인 패턴 및 용도에 대해 더 자세히 알아보십시오. 물론 원하지 않는다면 처음부터 프레임 워크를 작성할 필요가 없습니다. 이미 PHP 기반의 오픈 소스 구현이 몇 가지 있습니다 (예 : Recess PHP Rest Framework).

희망이 도움이됩니다.

0

나는 마침내 그것을 알아 냈 :

JS를 :

function postData() { 
var myData = { 
    firstName: 'John', 
    lastName: 'Doe' 
};  

$.ajax({ 
    type: "POST", 
    url: "postData.php", 
    data: JSON.stringify(myData), 
    success: function(msg){ 
     alert(msg); 
    }, 
    error: function(err){ 
     alert('error!' + JSON.stringify(err)); 
    } 
}); 
} 

PHP :

<?php 
$input = file_get_contents('php://input'); 
$jsonData = json_decode($input); 
$output = $jsonData->{'firstName'}; 
echo $output; 
?> 

하기 때문에, 당신은 두 번째 인수로 "true"를 넣어 싶지 않아 디코딩 그렇다면 JSON이 아니라 연관 배열 (또는 내가 읽은 것)입니다. json_decode ($ input, true)를 넣으면 작동하지 않습니다.

+0

또한 JSON을 javascript에'firstName ':'John '으로 삽입하는 대신 firstName :'John '이어야하며 실제로 올바른 JSON 객체를 만드는 JSON.stringify를 사용해야합니다. –