[已解决]为什么 $.ajax() 不能获取数据?

下面的代码运行后,总是获取不到服务端的数据,不知道为什么?

package main

import (
    "fmt"
    "log"
    "net/http"
)

var TestHTML = `<html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <script src="/static/jquery-3.1.1.js"></script>

    <script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
        url:"http://127.0.0.1:9090/ajax",
        success:function(result, status, xhr){
            alert(result);
            alert(status);
            alert(xhr);
        },
        error:function(xhr,status,error){
            alert(xhr);
            alert(status);
            alert(error);
        }});
    });
    </script>
</head>
<body></body>
</html>`

func index(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, TestHTML)
}

func ajax(w http.ResponseWriter, r *http.Request) {
    log.Println("进入 ajax 函数") // 看看 ajax 函数是否被执行
    fmt.Fprintf(w, "ajax data")
}

func fileHandler(w http.ResponseWriter, r *http.Request) {
    filePath := r.URL.Path[1:]
    // 不允许列出文件
    if len(filePath) > 0 && filePath[len(filePath)-1] == '/' {
        return
    }
    http.ServeFile(w, r, filePath)
}

func main() {
    http.HandleFunc("/", index)
    http.HandleFunc("/ajax", ajax)
    http.HandleFunc("/static/", fileHandler) // 处理静态文件
    err := http.ListenAndServe(":9090", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

共 7 个回复


stevewang

这个是属于前端的问题,不了解ajax。

# 0

stevenldj

我就纳闷了,FireFox 中是 success,Chromium 中是 error

# 1

stevenldj

我也刚开始学 jquery,希望有懂 jquery 的帮忙指点一下。

# 2

stevewang

是不是因为你本机上的/static/jquery-3.1.1.js这个脚本不存在或者路径错误?

# 3

stevenldj

不是,脚本中的 $.ajax() 可以正常执行,说明路径没问题,而且服务端的 ajax 函数也会被执行,只是客户端获取不到数据,总是得到

error:function(xhr,status,error){
            alert(xhr);
            alert(status);
            alert(error);
        }

而不是

success:function(result, status, xhr){
            alert(result);
            alert(status);
            alert(xhr);
        }

刚才又发现 FireFox 和 Chromium 执行的结果也不一样,我在想是不是浏览器缓存引起的。

# 4

seefan

看看是不是跨域了,不同的端口是不行的

# 5

stevenldj

问题找到了,我把$.ajax()请求的url地址换成本机的 192.168.1.100:9090/ajax 就可正常获取数据了(在 Forefox,Chorme,Chromium、IE11 中都测试通过),看来用127.0.0.1测试服务端还是不靠谱:

var TestHTML = `<html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <script src="/static/jquery-3.1.1.js"></script>
    <script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
        url:"http://192.168.1.100:9090/ajax", // 这里不能用 127.0.0.1
        success:function(result, status, xhr){
            alert(result);
            alert(status);
            alert(xhr);
        },
        error:function(xhr,status,error){
            alert(xhr);
            alert(status);
            alert(error);
        }});
    });
    </script>
</head>
<body></body>
</html>`
# 6