2012-05-11 41 views
0

這是一個非常簡單的問題,所以請不要開玩笑......我已經給了一個web服務的URL,它將爲我提供一個JSON對象。我想使用jQuery的的getJSON方法,例如...使用jQuery Ajax來返回一個JSON對象

var myObj = $.getJSON("https://www.myurl/"); 

然而,這ISN#牛逼的工作,當我使用的console.log(myObj.toSource()),我只是似乎得到了很多的JavaScript AF寫到控制檯而不是我的對象。我知道我可以添加一個回調用這種方法,我應該做這樣的事情:

var thisJsonObj; 

$.getJSON("https://www.myurl/", function(result){ 
    thisJsonObj = result; 

}); 

console.log(thisJsonObj.toSource()); 

這不起作用,要麼...我要去哪裏錯了?該URL正在工作並且正確。

+1

如果是跨域調用,請在jquery中嘗試使用jsonp而不是json。請記住在服務器端代碼中添加「回調」。 Jquery將永遠不會僅使用json進行跨域調用,但是您可以編寫自己的Ajax函數來避免此限制。 – Tom

+0

您對console.log的調用在http請求啓動後立即執行,但您的回調在http請求完成之前不會被調用,所以thisJsonObj不會在調用console.log時設置。如果您將console.log調用移入回調,您應該看到正確的結果 – jjwchoy

回答

2

Ajax的異步工作,讓你有回調函數裏面的JSON對象的工作:

var thisJsonObj; 
$.getJSON("https://www.myurl/", function(result) { 
    thisJsonObj = result; 
    console.log(thisJsonObj); 
}); 

此外,如果您使用外部web服務,你應該consider該請求應JSONP處理。因此,請檢查您的網址是否有點像「callback =?」。

0

雖然URL可能是web服務的URL,你是否應該在web服務中調用一個函數?舉例來說,如果你有一個python microframework(如在我的例子Flask),我希望得到的物品在組合框中顯示的列表,我的蟒蛇看起來有點像:

@app.route('/_gest_list.json') 
def get_list(): 
    #return list of jsonified items 

哪被稱爲在你的jQuery像

$.getJSON("/get_list.json", {}, function(data) { 
    //Do something 
}); 

把它看作如果我打電話給其映射到Web服務/服務器的URL並具有/get_list.json

此外,如果你是別名功能get_list()與ASP.Net一起工作必須寫出類似於(變量名).d的數據。 ASP.Net中的所有JSON數據都封裝在d!