0

我真的不知道下面的代码有什么问题。我在状态中没有得到任何回应...

<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."}
4

3 回答 3

3

引用文档

如果 URL 包含字符串“callback=?” (或类似的,由服务器端 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")
});
于 2012-12-17T11:43:44.133 回答
1

好的,所以跨域ajax安全问题是麻烦。您的调用脚本和目标脚本应该在同一个域中,这样它就可以在不付出额外努力的情况下工作。如果您打开浏览器的错误控制台,您应该能够在那里看到安全异常。

除非您已明确将其设置为支持来自其他主机的请求。

检查这些答案:

如何在服务器上启用跨域请求?

jQuery AJAX 跨域

于 2012-12-17T11:39:21.753 回答
1

我认为您遇到的是调用正在返回错误状态,但 .getJSON api 只为您提供了成功处理程序的选项。

您需要做的是查看 .ajax API,它允许您添加错误处理程序。.getJSON API显示了它的简写形式。查看.ajax API以了解您可以传递的所有选项。

编辑 我没有注意到这从未到达处理程序,因为这是一个CORS类型请求。

于 2012-12-17T11:40:24.843 回答