【问题标题】:cant do "GET" xmlhttrequest - error无法执行“GET”xmlhttprequest - 错误
【发布时间】:2012-11-20 02:06:42
【问题描述】:
  function regist(nome,pwd){
        URL+="register?nick=" + nome + "&key=" + pwd;
        var req = new XMLHttpRequest();
        req.open("get", URL, true);//Assincrono

        req.onreadystatechange = function(){
            if (req.readyState != 4) { 
                return;
            }
            else if (req.status != 200) {// Tratamento de erro (e.g., mostrar mensagem de erro)
                return;
            }
            var data=JSON.parse(req.responseText);
                    alert(data);
            if(data.error==null || data.error==undefined){
                    document.getElementById("register").innerHTML="Registo Bem Sucedido";
                }
                else{
                    document.getElementById("register").innerHTML="Utilizador já registado - Password errada";
                }
        };
        req.send();
    };

我无法访问 var 数据.. 可能是因为 "*req.onreadystatechange = function(){-----" 发生了什么?我的数据警报不起作用,它没有被读取..你能帮帮我吗?>正确定义了 URL,别担心 ;)


我对同源策略问题一无所知... GET 中使用的 URL 是:dcc.fc.up.pt:8080/TabuWeb/rest/register?nick=ola&key=mundo 我的页面网址:file:///home/carlos/public_html/TabuWeb2/WebContent/index.html?nick=ola&key=mund‌​o

同源策略有什么问题吗?这就是为什么我的 req.status=0 和 firebug 指向 req.send()?

谢谢

【问题讨论】:

  • alert(data) 显示什么内容?还是在它到达那里之前抛出异常?具体来说,运行此代码时会发生什么?
  • 在您的return;s 所在的位置使用return console.log(req.readyState, req.status);,而不是alert,您将能够遵循请求的每一步。 (您可能会发现它永远不会达到 200 OK)。您还说URL 定义正确,但我会指出window.URL 存在,所以如果您使用+=,您最终会得到奇怪的结果。
  • 好吧,我在发出警报后得到了 0(req.status):那么,为什么 req.status=0?我发现了另一件事,我启动了一个 console.log(req),然后我得到了指向 server.js(第 52 行)(req.send(null)) 的“GET:”URL“(LOADING)”。如果我“重新发送”,则 FIREBUG 会显示响应。好吧,我在执行 alert(req.status) 后得到了这个: else if (req.status != 200){ alert(req.status) --- --->>>>>0 return;} 那么,为什么req.status=0?我发现了另一件事,我启动了一个 console.log(req),然后我得到了指向 server.js(第 52 行)(req.send(null)) 的“GET:”URL“(LOADING)”。如果我“重新发送”,则 FIREBUG 会显示响应..
  • 你没有尝试跨域,因此遇到了同源策略,是吗?
  • 我对同源问题一无所知... GET 中使用的 URL 是:dcc.fc.up.pt:8080/TabuWeb/rest/register?nick=ola&key=mundo 我的页面 URL 是:file:///home/carlos/public_html/TabuWeb2/WebContent /index.html?nick=ola&key=mundo 同源政策有什么问题吗?谢谢

标签: javascript xml get xmlhttprequest onreadystatechange


【解决方案1】:

它不工作的原因可能有很多,仅从 ajax 调用很难判断。

首先,要查看您应该使用的数据:

alert(JSON.stringify(data));

或者直接,检查ajax是否返回有效的json:

alert(req.responseText);

data 是一个对象,所以alert(data) 不会显示太多。

另外,您的网址是否与您当前的页面在同一个域中?如果没有,您可能会成为same origin policy 的受害者。

【讨论】:

  • 好吧,我在发出警报后得到了 0(req.status):那么,为什么 req.status=0?我发现了另一件事,我启动了一个 console.log(req),然后我得到了指向 server.js(第 52 行)(req.send(null)) 的“GET:”URL“(LOADING)”。如果我“重新发送”,则 FIREBUG 会显示响应。好吧,我在执行 alert(req.status) 后得到了这个: else if (req.status != 200){ alert(req.status) --- --->>>>>0 return;} 那么,为什么req.status=0?我发现了另一件事,我启动了一个 console.log(req),然后我得到了指向 server.js(第 52 行)(req.send(null)) 的“GET:”URL“(LOADING)”。如果我“重新发送”,则 FIREBUG 会显示响应..
  • 我对同源问题一无所知... GET 中使用的 URL 是:dcc.fc.up.pt:8080/TabuWeb/rest/register?nick=ola&key=mundo 我的页面 URL 是:file:///home/carlos/public_html/TabuWeb2/WebContent /index.html?nick=ola&key=mundo 同源政策有什么问题吗?谢谢
  • @CarlosPiedade 同源策略规定,您只能从属于 dcc.fc.up.pt:8080 的页面获取 dcc.fc.up.pt:8080。然后有例外,但在你的情况下,这就是问题所在。这是一个广泛的主题,很难在论坛回复中进行总结,我鼓励您搜索网络以了解更多关于它和解决方法(受信任的服务器、CORS、JSONP)的信息。
  • 谢谢,我会和我的老师谈谈,看看他是否知道出了什么问题。这个问题很难解决。
猜你喜欢
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
相关资源
最近更新 更多