2012-03-26 3 views
0

는 다음과 같은 고려 ===========================

// javascript/jQuery 
$.ajax({ 
    type: 'POST', 
    url: 'daytime_check.php', 
    success: function(response) { 
     if(response == false) { 
      alert('Goodnight, brother'); 
     } else { 
      alert('Day\'s a wastin, brother'); 
     }    
    }, 
    error: function() { 
     //handle error 
    } 
}); 

이것은 내가 지금까지 AJAX의 PHP 스크립트에서 응답을 처리 한 방법입니다. 나는 현재의 방법이 꽤 clunky하다고 느끼기 때문에 누군가가 나에게 더 나은 방법으로 힌트를 줄 수 있기를 바라고있다.

특히 clunky는 JS 측에서 PHP 스크립트 출력의 "필터링"을 처리합니다. 예 :

이 경우 PHP의 응답은 JS var response ='0'이됩니다. 이제는 !responsefalse으로 평가되고, 흥미롭게도 은 true으로 평가되기 때문에 JS에서는 필터로 if (!response)...을 단순히 사용할 수 없습니다. 저글링 유형과 관련이 있습니다.

PHP에서 물건을 반환 할 수있는 유일한 방법은 텍스트 (echo 문)이기 때문에 JS 측에 도착하면 적절한 진실/거짓 값을 필터링하여 필터링 할 수 없습니다. 이 문제를 해결할 더 좋은 방법이 있습니까?

적어도 조금 이해가 되었기를 바랍니다.

답변

1

원하는 유형을 반환 할 수 있습니다. JSON 응답 만 사용하면됩니다. jQuery를이 응답 파싱

{"isDateTime":false,"message":"Some optional message to display","timestamp":1332792739} 

클라이언트 측 :

// you can return what ever you want via JSON 
die(json_encode(array(
    'isDateTime' => $is_datetime, 
    'message' => 'Some optional message to display', 
    'timestamp' => time() 
))); 

이가 출력이 문자열 여기

$.ajax({ 
    type: 'POST', 
    url: 'daytime_check.php', 
    dataType: 'json', 
    success: function(response) { 
     if (response.isDateTime) { ... } 
     // typeof response.isDateTime == 'boolean' 
     // alert(response.message)   
    }, 
    error: function() { 
     //handle error 
    } 
}); 
+0

나는 이것을 좋아합니다. PHP에서 값을 반환 할 때'die()'를 사용하는 방법도 흥미 롭습니다. 그것은 단지 메모리 문제에 대한 스크립트를 죽일 수 있습니까? – eysikal

+1

그럼'echo' 나'print'를 사용할 수 있습니다. 이 방법을 사용하면 JSON 만 출력하고 스크립트가 종료 된 후에야 'die'를 선호합니다. – dfsq

+0

나는 그 생각을 좋아한다. 나는 그 일을 전에 보지 못했다.좋은 생각이들 것 같습니다. – eysikal

0

메시지를 성공 처리기에 표시하기 만하면 메시지 자체를 반환하지 않는 이유는 무엇입니까?

<?php 
//daytime_check.php 
    $is_daytime = false; 
    if ($is_daytime) { 
     echo "Day's a wastin', brother"; 
    } else { 
     echo "Goodnight, brother"; 
    } 
?> 

$.ajax({ 
    type: 'POST', 
    url: 'daytime_check.php', 
    success: function(response) { 
     alert(response);   
    }, 
    error: function() { 
     //handle error 
    } 
}); 
+0

음, 이것은 예를 들어 코드를 과도하게 단순화되고/간결 목적. 이 경우에 당신이 제안한 것은 괜찮을 것입니다. 그러나 나는 모든 경우를 다루는 것을 찾고 있습니다. – eysikal

+0

'1'또는 '0'을 반환하는 것이 좋습니다. 0이 아닌 값이나 null이 아닌 값 또는 비어 있지 않은 값을 통과하는'if (response)'를 체크 할 수 있습니다. – ShankarSangoli

+0

당신이 명확히 할 수 있습니까? 실제로 'response'가''0 ''또는''1 "''true/false'의 문자열 표현을 가리키고있을 때'if (response)'가 꽤 잘 체크하는지 알 수 있습니다. – eysikal

0

지능형 전 동료에 의해 제공 깔끔한 해결책 . 다음과 같은 방법으로 PHP 스크립트에서

반환 값 :

<?php 
    // To return an error 
    echo json_encode(
     array(
      'success' => false, 
      'message' => '[error message here]', 
     ) 
    ); 
    // To return a successful response 
    echo json_encode(
     array(
      'success' => true, 
      'response' => [return value here], 
     ) 
    ); 

이 방법은, 우리는 쉽게 JS 측의 논리를 수행 할 수 있습니다

$.ajax({ 
    type: 'POST', 
    url: 'ajax_example.php', 
    success: function(response) { 
       response = JSON.parse(response); 
       if (!response.success) { 
        alert(response.message); 
       } else { 
        console.log(response.response);  
       } 
    }, 
    error: function() { 
       //handle error 
       alert('error doing ajax, mate'); 
      } 
    });   
관련 문제