2013-11-25 140 views
0

這裏是我的jQuery Ajax代碼JQuery的AJAX沒有得到成功的回調函數

$(document).ready(function() { 

      $("#submitService").click(function(){ 
       alert("Before ajax"); 
      $.ajax({ 
       type: "GET", 
       url: "http://api.openweathermap.org/data/2.5/weather?q=London,uk", 
       headers: {"accept": "application/json"}, 
      success: function (dataItem) { 
       alert("Success.."); 
      }, 
      complete: function (dataItem) { 
       alert("Completed"); 
      }, 
       error: function (dataItem) { 
       alert("Error in making engine call."+dataItem); 
       } 
      }); 
      alert("After ajax"); 

      });     //click() 
     }); 

當點擊我的按鈕進入到[完成]和[錯誤]回調方法,而不以「成功「回撥方法。我怎樣才能看到錯誤是什麼?

我試着捲曲相同的語句,我得到一個有效的響應:

curl "http://api.openweathermap.org/data/2.5/weather?q=London,uk" -H "accept: application/json" 

我使用jQuery 1.7.2

<script type="text/javascript" src='<spring:url value="/resources/jquery/js/jquery-1.7.2.min.js"/>'></script> 

在Firebug它表明用200 OK這一要求,但沒有反應機構。但是,當我通過捲髮來看時,我會看到響應體。

可能是什麼問題? 謝謝

回答

3

我想,這是URL編碼問題。與編碼%2C

url: "http://api.openweathermap.org/data/2.5/weather?q=London%2Cuk" 
+0

謝謝!但是即使我取代成功回調,仍然不會被調用,%2C – Rose

+0

是的,您擁有'無訪問控制 - 允許 - 來源'問題。 – Masudul

+0

看起來像我需要更改遠程服務器配置添加Access-Control-Allow-Origin:*作爲響應的一部分。對?假設我在服務器上有一個控件。否則,我該如何解決這個問題? – Rose

1

替換逗號,取消click事件

$("#submitService").click(function(e){ 
    e.preventDeault(); 
    ... 

,讓jQuery的做URL

type: "GET", 
url: "http://api.openweathermap.org/data/2.5/weather", 
data: {q : "London,uk" }, 

,並希望該服務,您的瀏覽器都支持的正確的編碼CORS,因爲這是一個Same Origin Policy問題。

+0

這一個不工作太。我在函數中添加了一個參數e.preventDefault();並從url中分離查詢的數據部分。仍然不成功。 – Rose

1

您是否注意到Api調用中沒有Allow-Access-Origin?

我得到這個對鉻

的XMLHttpRequest無法加載 http://api.openweathermap.org/data/2.5/weather?q=London,uk。否 「訪問控制 - 允許來源」標題出現在請求的 資源中。因此,'http://jquery.com'不允許訪問。

我認爲你有一個跨站點腳本問題。

+0

感謝尼廷,我想這沒有任何工作。我打算向我的服務器發出請求,並從我的服務器撥打電話,而不是從JavaScript撥打電話。我的理解是約束僅限於js進行調用,而不是來自服務器的java調用。我對嗎? – Rose

0

更改應用程序/ json到應用程序/ x-www-form-urlencoded