2012-08-29 2 views
0

서버에 간단한 JSON 게시를 만들고 있습니다. 부울로만 가져옵니다. 문제는이 json 호출이 그 부울을 반환해야하는 또 다른 함수 안에 있다는 것입니다.

내가 어떻게 든 JSON 반환 함수에서 데이터를 반환하고 래퍼 함수 (I이 작동하지 않습니다 여기에있는 코드에서 다시 반환이 개 여기에 솔루션

  1. 을 가지고, 나는 방법을 알아낼 수 없습니다 함수 "로부터 데이터를 반환() {} $ .postJSON 내부 : g (오류 I :이 같은 결과를 반환하고 마침 POST위한

    function testZipCode(zipcode, state) { 
        var s; 
        $.postJSON("/Cart/ZipTest", 
         { 
          state: state, 
          zipCode: zipcode 
         }, function (data) { 
          if (!data.ok) { 
           s = false; 
          } 
          s = true; 
         }); 
         return s; 
    } 
    

  2. }

  3. 기다리 여기에 POST가 완료되기 전에 return을 호출하므로 responseText는 null입니다. 아무도 도와 줄 수 있습니까?

    var result = $.postJSON("/Cart/ZipTest", 
    { 
          state: state, 
          zipCode: zipcode 
         }, function (data) { 
          if (!data.ok) { 
           //do something 
          } 
         }); 
         return $.parseJSON(result.responseText).ok; 
    
+0

당신은 방법을 만드셨습니까 ''jQuery.postJSON'? jQuery는 하나의 빌트인과 함께 제공되지 않습니다. responsetext가 값을 가지기 전에 당신의 return'$ .parseJSON (...)'이 일어날 것입니다. 비동기 코드는 그렇게 쓰여서는 안됩니다. –

+0

그게 정확히 문제입니다. 네, 전 .postJSON 있습니다. 감사합니다 –

답변

2

돌려 DEFFERED 객체와 아약스 호출하고 콜백 함수에 뭔가를 할 :

function someOtherFunction() { 
    testZipCode('90102', 'FL').done(function(data) { 
     if (!data.ok) something = false; 
    }); 

} 

function testZipCode(zipcode, state) { 
    return $.getJSON("/Cart/ZipTest", {state: state, zipCode: zipcode}); 
}​ 
+0

testZipCode를 종료 한 후에 someOtherFunction() 내부에서 뭔가를 사용할 수 있습니까? –

+0

비공개 아약스 호출이 작동하는 것처럼 반환 된 객체에 대한 변수를 사용하여 콜백 내부에서만 또는 코드의 다른 곳에서 다시 Deffered 객체에서'done()','always()'등을 호출하면됩니다. – adeneo

+0

ZipTest.ok의 결과가 false 일 경우 someOtherfunction()을 종료하십시오. done() 밖에서'something '을 사용할 수 없다면 나는 제대로 할 수 없을 것입니다. –

0

은 같은 것을 할 ...

{ 
      state: state, 
      zipCode: zipcode 
     }, function (data, count) { 
      if (!data.ok) { 
       getTheData(data); //do something 
      } 
     }); 


      return $.parseJSON(result.responseText).ok; 

     function getTheData(data) 
{ 
//do things with data here 
} 
관련 문제