2012-08-29 21 views
0

我正在做一個簡單的JSON發佈到服務器,我檢索布爾值。問題是這個json調用在另一個需要返回布爾值的函數中。

我這裏有兩種解決方案

  1. 不知從JSON返回函數返回值,然後從包裝函數(即我這裏不起作用的代碼再次返回它,我無法弄清楚如何從「功能返回數據(){} $ .postJSON內:

    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. 等待POST完成,然後返回結果是這樣的:(誤差我克這裏是我在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不附帶一個內置的。你的返回'$ .parseJSON(...)'將在responsetext有一個值之前發生,異步代碼不應該這樣寫。 –

+0

這正是問題所在。是的,我確實有.postJSON。謝謝 –

回答

2

返回Ajax調用作爲遞延對象,做一些回調函數:

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

只有在回調函數中,或者通過使用返回對象的變量,在代碼中的其他位置再次調用'done()','always()'等方法,才能調用異步ajax調用。 – adeneo

+0

我的目標是退出someOtherfunction()如果ZipTest.ok的結果== false;如果我不能在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 
}