0

我有一个针对数据库验证 ID 的函数。如果找到 ID,则该函数返回 true,否则返回 false。

得到在其他浏览器中工作的请求。现在正在使用 Internet Explorer 的 XDomainRequest 来解决这个问题。

function verify(id){
    xmlhttp=new window.XDomainRequest();
    xmlhttp.onload = checkResponse;
    xmlhttp.open("GET", "http://abc.com/verify?id=" + encodeURIComponent(id));
    xmlhttp.send();

    function checkResponse(){
        if(xmlhttp.responseText == 200) {   
            return true;
        } else {
            return false;
        }
    }
}

问题是我希望验证函数返回 false,而不是 checkResponse 函数。

在其他浏览器中将 open 设置为 false 可以解决问题,但在 IE 中则不然。

请不要 jQuery 答案。

谢谢你的帮助!

4

2 回答 2

4

这是将 IE8 中的 CORS 请求合并到 jQuery 中的推荐方法。您可能可以将此作为您自己的起点:

https://github.com/jaubourg/ajaxHooks/blob/master/src/ajax/xdr.js

此外,verify不应该是同步操作。建议将回调函数传递给它并保持异步:

function verify(id, callback){
    var xmlhttp = new window.XDomainRequest();
    xmlhttp.onload = function () {
        callback( xmlhttp.responseText === 200 );
    };
    xmlhttp.open("GET", "http://abc.com/verify?id=" + encodeURIComponent(id));
    xmlhttp.send();
}

然后你可以这样调用:

verify( 123456, function ( isValid ) {
    if ( isValid ) {
        // do something if valid
    } else {
        // or not
    }
});
于 2012-05-02T19:26:41.560 回答
-2

您需要考虑的第一点是将 js 代码更改为非异步工作。否则 checkResponse 是您必须得到答案的唯一点。您的代码似乎是异步的,它应该是同步的。

问候。

于 2012-05-02T19:23:07.283 回答