jquery ajax调用返回200,有效json,触发错误事件

时间:2011-07-22 09:07:16

标签: jquery asp.net json

我在这里读过许多其他帖子,说明同样的问题,结果证明是无效的json。

然而,这不是我的问题,我从相同的症状中躲避,但据我所知,json是有效的:

好吧,这是我的代码:

function CheckEmail(email) {
    $.ajax({
        type: "GET",
        url: "<%=_baseUrl%>/CheckEmail.ashx?email=" + email,
        dataType: "json",
        success: function (response) {
            var json = response;

            if (json.emailExists == "true") {
                emailValid = false;
                $('#emailError').html('Email address already exists in our system, please try a different address');
            }
            else {
                emailValid = true;
                $('#emailError').html('');
            }
        },
        error: function (response, ajaxOptions, thrownError) {
            emailValid = false;
        }

    });
}

我总是遇到错误事件。

这是来自ashx处理程序的响应(通过fiddler看到):

接头

HTTP/1.1 200 OK
Date: Fri, 22 Jul 2011 08:22:39 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: application/json; charset=utf-8
Content-Length: 23

内容

{"emailExists":"false"}

有人可以说明为什么会失败吗?

thrownError =“” ajaxOptions =“错误” 和response中的errorText =“错误”

2 个答案:

答案 0 :(得分:2)

这可能是 - jquery ajax has a problem getting return value from ashx handler - 可能的答案吗?似乎和你有同样的问题!

修改 我也很好奇它背后的原因。如果它是异步ajax调用(http://roshanbh.com.np/2008/01/how-to-return-value-from-ajax-function-use-synchronous-request.html),则可能返回null,默认情况下jQuery ajax。但如果它是相对路径,你的工作正常。也许这是绝对路径导致跨域调用的问题,并且由于某种原因忽略了返回值?你能尝试使用绝对路径并强制同步ajax调用吗?

答案 1 :(得分:1)

我不知道你为什么会收到这个错误,但我注意到你的代码中应该改变两件事(但我不认为它们是错误的原因)。

此:

url: "<%=_baseUrl%>/CheckEmail.ashx?email=" + email,

应该是:

url: "<%=_baseUrl%>/CheckEmail.ashx",
data: { email: email }

而且:

{"emailExists":"false"}

可能更好:

{"emailExists":false}

所以你在javascript中得到一个实际的假值,而不是字符串。