2012-05-29 4 views
0

jsonServerResponse 함수에서 반환 된 값을 경고하면 process.php 페이지에서 JSON이 반환 되더라도 해당 값은 정의되지 않습니다.Ajax 응답을 반환하는 함수 - 값이 정의되지 않았습니까? jQuery Ajax

function jsonServerResponse(operation, JSOoptionalData) { 
     JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData 
     var jqxhr = $.ajax({ 
      type: "POST", 
      url: "process.php", 
      data: "apicommand=" + JSOoptionalData, 
      success: function (json) { 
       return jQuery.parseJSON(json); 
      } 
     }); 
} 

alert("Response as JS Object: "+jsonServerResponse("operation")); 

이 문제는 비동기 요청 전에 완료된 경고 기능이 있지만이 문제를 해결하는 방법이 확실하지 않다는 것을 알고 있습니다. 어떤 조언 정말 감사합니다 :) 당신은 문제를 못을 박았다

답변

0

좋아, 나는 다른 게시물에서 알아 냈어. 결과는 success 콜백 내에서 처리되거나 콜백 함수 그 자체 인 인수를 추가하고 ajax 요청의 결과를 콜백에 적용 할 수 있습니다.

function jsonServerResponse(operation, callback, JSOoptionalData) { 
     JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData 
     jqxhr = $.ajax({ 
      type: "POST", 
      contentType: "application/json", 
      url: "process.php", 
      data: "apicommand=" + operation + "&optionaldata" + JSON.stringify(JSOoptionalData), 
      dataType: "json", 
      success: function (json) { 
       if(typeof callback === 'function') callback.apply(this, [json]); 
      } 
     }); 
} 


jsonServerResponse("get_something_from_server", function(returnedJSO){ 
    console.log(returnedJSO.Result.Some_data); 
}, "optional_data"); 

gdoron, 당신이 물어 본 라인은 세 번째 인수를 선택적으로 만듭니다. 선택적인 인수를 추가하고 js 객체를 전달하고이를 JSON 문자열로 변환 한 다음 서버에 디코드 할 서버에 데이터를 전달하려는 경우 (실제로 많은 변수를 모르는 경우) 좋은 사례라고 들었습니다. 측면.

평화! :)

1

, 아약스는 당신은 단지 성공 콜백에서 반환 된 데이터를 사용할 수 있습니다, 비동기 작업입니다 :

는 AJAX 요청이 비동기 때문이다
function jsonServerResponse(operation, JSOoptionalData) { 
    // What that line suppose to do??? 
     JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData 
     var jqxhr = $.ajax({ 
      type: "POST", 
      url: "process.php", 
      data: "apicommand=" + JSOoptionalData, 
      dataType: "json", // Change the dataType to json. 
      success: function (json) { 
       console.log("Response as JS Object:") 
       console.log(json); 
      } 
     }); 
} 
5

, 따라서 호출이 완료되기 전에 return에 도달하므로 함수는 항상 null을 반환합니다.

success 내에서 AJAX 호출에 의존하는 코드를 호출해야합니다. 이것을 시도하십시오 :

function jsonServerResponse(operation, JSOoptionalData) { 
    JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData 
    var jqxhr = $.ajax({ 
     type: "POST", 
     url: "process.php", 
     data: "apicommand=" + JSOoptionalData, 
     success: function (json) { 
      alert("Response as JS Object: " + json); 

      // to see more information about the object returned, use console.log: 
      console.log(json); 
     } 
    }); 
} 

jsonServerResponse("operation") 
+1

24 초 빠릅니다. –

+0

요청에서 성공 콜백 외부의 변수에 데이터를 캡처하는 방법이 있습니까? – TaylorMac

+1

@TaylorMac 여전히 전역 변수에 넣을 수 있지만 일단 AJAX 호출이 완료되면 변수 만 사용하면 매우주의해야합니다. 가장 좋은 방법은'success' 핸들러에서 AJAX 호출의 결과를 전달하는 함수를 호출하는 것입니다. –

관련 문제