2012-09-20 25 views
0

測試函數綁定到一個按鈕單擊事件。我是jquerymobile的新手,我試圖獲得JSON響應。我已經完成了JQUERY文檔所說的內容,但回調函數沒有獲得調用。jquery mobile中的回調函數

你能告訴我我做錯了什麼嗎?

function test(evt) { 

    // addNote($('#title').val(),$('#note').val()); 
    alert("hello");// <----This alert is displayed 

    $.get("http://weather.yahooapis.com/forecastjson?w=2502265",{}, function (data) { 
     alert("testing");//<--This alert is NOT displayed 
     alert("Data Loaded: " + data);//<--This alert is NOT displayed 
    }, "json"); 

    alert("Hello");//// <----This alert is displayed 
} 
+1

檢查JavaScript控制檯。我懷疑跨站點策略錯誤。 –

+0

跨域策略的方法。 ** 1)**使用JSONP,這是內置的jQuery,但要求外部服務器的輸出採用JSONP格式(這是JSON包裝在一個函數中)。 ** 2)**在您的域上使用服務器端腳本來執行跨域位。基本上創建一個轉發器,從外部域獲取數據,然後將其放回給您的域。這個話題已經被一次又一次地討論過了,所以如果你搜索StackOverflow,你會發現很多好的信息。 – Jasper

回答

0

由於源策略相同,您無法從其他域請求。

您可以向另一個域發出JSONP請求,但問題是您調用的Web服務器正在返回JSON,而不是JSONP。但是,我剛剛安裝了可以使用的JSON/JSONP代理。它會向您指定的URL發出請求,將其轉換爲JSONP並返回。

呼叫代理,並把雅虎的網址在url參數,更改數據類型"jsonp"

$.get("http://jsonp.guffa.com/Proxy.ashx?url=weather.yahooapis.com%2fforecastjson%3fw=2502265",{}, function (data) { 
    ... 
, "jsonp"); 

演示:http://jsfiddle.net/Guffa/bwZMZ/

信息頁:http://jsonp.guffa.com/

0

首先àlert("hello")預計將在任何其他人之前開火。如果呼叫成功,處理程序將在某個時間點被呼叫。

但是,由於跨站點策略,這不太可能發生。如果您在開發控制檯看上去你可能會看到類似XMLHttpRequest cannot load http://weather.yahooapis.com/forecastjson?w=2502265&_=1348150852704. Origin http://stackoverflow.com is not allowed by Access-Control-Allow-Origin.

,如果你想添加一個處理錯誤,你可以做到這一點,以及

代碼簡單地擴展到

$.get("http://weather.yahooapis.com/forecastjson?w=2502265",{}, function (data) { 
alert("testing");//<--This alert is NOT displayed 
alert("Data Loaded: " + data);//<--This alert is NOT displayed 
}, "json").fail(function(jqXHR, textStatus) { 
    alert("Request failed: " + textStatus); 
}); 

通知.fail你的原始代碼後。提供的功能將在與遠程服務器的通信出現錯誤時調用。

0

我確定您的網頁未位於網站http://weather.yahooapis.com。除了您自己的網站(您的網頁從中下載)之外,您不允許進行ajax調用以從Arbituary網站獲取數據,這就是所謂的同源策略!如果你想從其他網站獲取數據,你應該使用json-rpc,即。動態創建腳本標記,並將src屬性設置爲要從中獲取數據的地址。如果該站點支持這種協議,它將以js片段的形式返回所請求的數據,並將您的設置作爲GET參數調用回去。

+0

所以,如果我想用JS獲取像「google.com」這樣的任意頁面,這是不可能的?如果服務器端沒有這些功能會怎麼樣?如果我被鎖定使用jquery和javascript?有沒有其他的我可以使用JQuery的,也沒有改變服務器端來完成這? – Abhik

+0

@ user38923 - 對於普通的html頁面,完全不可能跨站點ajax,這都是爲了安全。想象一下,你寫了一個web應用程序,將一些第三方js文件鏈接爲你的庫,如果允許跨站點ajax,代碼駐留在第三方js中,則可以收集你的用戶的密碼並將其轉移到他們的站點 - 這是不可接受的。請記住,GET請求不僅會獲取數據,它還會提交用戶端信息,因爲它是參數。你不能在普通頁面上進行這種GET,除非你正在編寫一個瀏覽器插件,該插件授予你的其他特權。 – Need4Steed