2012-12-17 101 views
0

我真的不知道下面的代碼有什麼問題。我沒有收到在狀態任何迴應...Jquery catch JSON響應

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js">  
</script> 
<input type="text" name="UserName" id="UserName" /> 
<div id="divStatus"></div> 
<script type="text/javascript"> 
    $("#UserName").keyup(function() { 
     var name = $("#UserName").val(); 
     var status = $("#divStatus"); 
     var user = $.trim(name); 
     if (user.length > 3) { 
      status.html("Checking....") 
      $.getJSON("http://192.168.0.14/openids/api/json/user/username/availability/check/", { 
       username: name, 
      }, function(data) { 
       status.html("got") 
      }); 

     } else { 
      status.html("Min 3 letters "); 
     } 
    });​ 
</script> 

JSON響應如下:

{"status": "Error", "message": "A user with this username already exists."} 
+1

使用的縮進具有誤導性。 – techfoobar

+0

你的問題是什麼?你期待它返回/做什麼? – Oldskool

+0

我只想抓住狀態「錯誤」...在上面的代碼中,我只是想要一個通知,當我得到一些數據... – Nautical

回答

3

引述documentation

如果URL中包含字符串 「回調=?」 (或類似的,由服務器端API定義的 ),請求將被視爲JSONP。有關更多詳細信息,請參閱$ .ajax()中有關jsonp數據類型的 討論。

由於您提出的是跨域請求,因此您可能需要使用JSONP。爲此,請在查詢字符串的末尾添加callback參數:

$.getJSON("http://192.168.0.14/openids/api/json/user/username/availability/check/?callback=", { 
    username: name, 
}, function(data) { 
    status.html("got") 
}); 
+0

謝謝你......但是下面的url工作... [http://] 192.168.0.14/openids/api/json/user/username/availability/check/?callback=? – Nautical

1

好了,跨域Ajax安全問題的麻煩。您的調用腳本和目標腳本應位於同一個域中,無需額外工作即可工作。如果你打開瀏覽器的錯誤控制檯,你應該能夠看到安全例外。

除非您明確地設置它來支持來自其他主機的請求。

檢查這些問題的答案:

How to enable cross-domain request on the server?

jQuery AJAX cross domain

+1

是的..你是正確的..我得到了「XMLHttpRequest無法加載192.168.0.14/openids/api/json/user/username/availability/check/?username=hjmghj。Origin 192.168 .0.8不被Access-Control-Allow-Origin允許。「 – Nautical

1

我認爲你正在運行到什麼是呼叫返回一個錯誤狀態,但.getJSON API只給你的選項成功處理程序。

你需要做的是看看.ajax API,它允許你添加一個錯誤處理程序。 .getJSON API顯示了它的縮寫。此外,您還可以查看.ajax API的所有選項。

編輯 我沒有注意到這個從來沒有處理程序,因爲這是一個CORS類型的請求。