2014-02-21 3 views
1

Я хочу сделать что-то вроде regist с ajax. Я просто использую URL-адрес запроса ajax «/ check», и он возвращает «{success: 1}», но когда я использую res = request.responseText, res ничего. Однако, console console (query.responseText), он превращается в {success: 1}, как я могу получить значение, что не так с моим кодом?Почему я не могу получить responseText с ajax

в моем regist.gtpl

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>{{.Title}}</title> 
    <style type="text/css"> 
    input { 
     display: inline-block; 
     background: rgba(45,45,45,.03); 
    } 
    form { 
     text-align: center; 
     width: 200px; 
     margin: auto; 
    } 
    .container { 
     margin-top: 120px; 
    } 
    </style> 
    </head> 

    <body> 
    <div class="container"> 
     <form method="post" action="/regist"> 
     <input type="text" name="username" placeholder="账号"/> 
     <input type="password" name="password" placeholder="密码" /> 
     <button>sign me in</button> 
     </form> 
    </div> 
    <script type="text/javascript" src="../assets/ajax.js"></script> 
    <script type="text/javascript"> 


    function cb(request){ 
     alert("Server is done!") 
     console.log(request.responseText) 
     var res = request.responseText 
     //var resJSON = JSON.parse(res) 
     //console.log(res) 
     alert(res) 
    } 

    Get("http://127.0.0.1:3000/check",cb) 

    </script> 
    </body> 
    </html> 

в моем main.go

func sayHelloName(w http.ResponseWriter, r *http.Request) { 
     r.ParseForm() 
     fmt.Println(r.Form) 
     for k, v := range r.Form { 
      fmt.Println("key:", k) 
      fmt.Println("value", v) 
     } 
     fmt.Fprintf(w, "{userId:1}") 
    } 
    func Register(w http.ResponseWriter, r *http.Request) { 

     if r.Method == "GET" { 
      fmt.Println("GET",r.URL.Path) 
      t, err := template.ParseFiles("templates/regist.gtpl") 

      if err != nil { 
       panic(err) 
      } 
      //长度,容量 
      //studentsandstates := make(studentsAndStateSlice,20) 

      t.Execute(w, Render{Title:"注册"}) 
     } 
    } 

    func init() { 
     staticHandler = http.StripPrefix("/assets/", http.FileServer(http.Dir("statics"))) 
    } 

    func main() { 
     http.HandleFunc("/check", sayHelloName) 
     http.HandleFunc("/register", Register) 
     //已经有静态文件了 
     http.HandleFunc("/assets/", StaticServer) 
     err := http.ListenAndServe(":3000", nil) 
     if err != nil { 
      log.Fatal("ListenAndServe: ", err) 
     } 
    } 

в моих ajax.js

var Get 

(function(){var request = false 

function createRequest() { 

    try { 
    request = new XMLHttpRequest(); 
    } catch (trymicrosoft) { 
    //两种微软的XMLHttpRequest 
    try { 
     request = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch (othermicrosoft) { 
     try { 
     request = new ActiveXObject("Microsoft.XMLHTTP"); 
     } catch (failed) { 
     request = false; 
     } 
    } 
    } 
    if (!request) 
    alert("Error initializing XMLHttpRequest!"); 
} 

createRequest(); 

Get = function (url,cb){ 
    request.open("GET",url); 
    request.onreadystatechange = cb(request); 
    request.send(); 
} 

})(); 
+0

Вы обслуживаете веб-страницу с того же сервера, к которому вы пытаетесь получить доступ через XmlHTTPRequest? Если нет, то браузер, вероятно, рассматривает его как запрос с перекрестным происхождением и блокирует ответ. –

+0

да, я получил страницу регистрации, получив 127.0.0.1:3000/register – ggaaooppeenngg

ответ

1

Это выглядит л икэ проблема в вашей Get() функции Javascript:

Get = function (url,cb){ 
    request.open("GET",url); 
    request.onreadystatechange = cb(request); 
    request.send(); 
} 

Вы устанавливаете onreadystatechange свойство в результате вызова cb. На этом этапе запрос не был отправлен, поэтому текст ответа не читается. Ниже приведен один из возможных путей решения проблемы:

request.onreadystatechange = function() { cb(request); }; 
Смежные вопросы