问个 ajax 的问题,谢谢帮助 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
bmcjxhgwy
V2EX    Python

问个 ajax 的问题,谢谢帮助

  •  
  •   bmcjxhgwy 2018-03-03 20:14:21 +08:00 3993 次点击
    这是一个创建于 2785 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 django 中,前端发送了数据,我后台返回了{‘ res ’:0},在前端 response 中也接受到了,为什么 ajax 一直走 err 啊?是返回格式不对吗,应该在哪改啊?谢谢了
    28 条回复    2018-03-04 15:28:26 +08:00
    liuxu
        1
    liuxu  
       2018-03-03 20:16:50 +08:00 via Android
    json 应该用双引号
    bmcjxhgwy
        2
    bmcjxhgwy  
    OP
       2018-03-03 20:23:43 +08:00
    谢谢,但他还是走 err 我返回的 data 是个 object,但一旦打印 data.res 他就显示 undefined,我觉得是返回的格式不对,但是不知道怎么改
    gongpeione
        3
    gongpeione  
       2018-03-03 20:26:46 +08:00
    跨域了?
    bmcjxhgwy
        4
    bmcjxhgwy  
    OP
       2018-03-03 20:28:09 +08:00
    在 F12 页面上没显示有跨域的问题.....
    bmcjxhgwy
        5
    bmcjxhgwy  
    OP
       2018-03-03 20:29:56 +08:00
    我用了 jsonp 应该不会有跨域的请求..
    loading
        6
    loading  
       2018-03-03 20:30:00 +08:00 via iPhone
    返回没指定 mime ?
    或者 js 里面先 序列化一下。

    jQuery.parseJSON(jsonstr),
    bmcjxhgwy
        7
    bmcjxhgwy  
    OP
       2018-03-03 20:36:39 +08:00
    序列化了好像也没什么用.....
    bxb100
        8
    bxb100  
       2018-03-03 20:40:27 +08:00 via Android
    前端用()拼接试试
    Yunhao
        9
    Yunhao  
       2018-03-03 20:44:46 +08:00 via iPhone
    用 postman 跑一下试试?
    dinggk
        10
    dinggk  
       2018-03-03 20:48:16 +08:00 via Android
    后端指定 contenttype text/json
    summerwar
        11
    summerwar  
       2018-03-03 20:51:22 +08:00
    放代码啊 ,难道靠猜吗?不放代码来截图也行啊
    loading
        12
    loading  
       2018-03-03 21:17:19 +08:00 via iPhone
    不给代码确实已经没法帮你了。
    Danielfile
        13
    Danielfile  
       2018-03-03 21:25:37 +08:00 via Android
    你是在外面打印的吧?要把 async 设置为 false,默认是异步执行请求的。
    bmcjxhgwy
        14
    bmcjxhgwy  
    OP
       2018-03-03 21:33:16 +08:00
    这是 ajax:
    $(function(){
    $('#send-btn').click(function(){
    $.ajax({
    url:'http://127.0.0.1:8000/laoguo/',
    type:'get',
    data:{'name':'laoguo'},
    dataType:'jsonp',
    success:function(data){
    if(data.res == 0){
    alert('get')
    }else{
    alert('....')
    }
    },
    error:function(data){
    alert(data.res)
    }
    })
    })
    })

    这是 django 的 view:
    def test(request):
    if request.method == "GET":
    name = request.GET.get("name")
    print(name)
    return JsonResponse({"res":0})
    else:
    name = request.POST.getlist("name")
    print(name)
    return JsonResponse({"res":1})
    misaka19000
        15
    misaka19000  
       2018-03-03 21:35:53 +08:00
    看下控制台有没有报错
    xy90321
        16
    xy90321  
       2018-03-03 21:40:24 +08:00
    jquery ?改成下面这样然后设个断点调试下
    error: function(data, status, error){
    }
    总过先看看什么错咯
    sublime
        17
    sublime  
       2018-03-03 21:40:27 +08:00
    返回的数据格式不对,你这个是 jsonp,需要后台处理下,比如 fn_cb({"res": 0}),不能直接返回 json
    bmcjxhgwy
        18
    bmcjxhgwy  
    OP
       2018-03-03 21:45:29 +08:00
    @sublime fn_cb 是什么....我也觉得是数据格式不对
    brickyang
        19
    brickyang  
       2018-03-03 21:55:23 +08:00
    如果你确实知道是要用 JSONP,那么不能直接返回 JSON,而且 url 也写错了。

    https://segmentfault.com/a/1190000008445998
    sublime
        20
    sublime  
       2018-03-03 21:57:09 +08:00
    @bmcjxhgwy fn_cb 是任意函数名,jsonp 是在前台定义一个函数,后台返回一段 js 代码调用这个函数并传入数据,以此来实现跨域,jquery 应该对返回的数据做了校验,后台返回的数据格式不对,所以进了 err
    brickyang
        21
    brickyang  
       2018-03-03 21:59:05 +08:00
    另外针对跨域,个人倾向于优先选择 CORS: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
    leamtrop
        22
    leamtrop  
       2018-03-03 22:11:52 +08:00 via Android
    dataType 属性值改成 JSON 试试
    bmcjxhgwy
        23
    bmcjxhgwy  
    OP
       2018-03-03 22:16:09 +08:00
    zhuzhuyule
        24
    zhuzhuyule  
       2018-03-03 22:18:29 +08:00
    $.ajax(
    ....
    datatype: 'text',
    success: console.log,
    error: console.error
    );

    因为你后台返回的数据格式不一定处理正确了,所以这里用`datatype: 'text'`,如果可以行得通,
    再使用:

    $.ajax(
    ....
    datatype: 'json',
    success: console.log,
    error: console.error
    );

    应该问题可以解决了。
    bmcjxhgwy
        25
    bmcjxhgwy  
    OP
       2018-03-03 22:42:02 +08:00
    @sublime 改了后现在服务器端报 500 错误...

    def test(request):
    if request.method == "GET":
    name = request.GET.get("name")
    print(name)
    return HttpResponse("func({'res':0})")
    else:
    name = request.POST.get("name")
    print(name)
    return HttpResponse("func({'res':1})")


    $.ajax({
    url:'http://127.0.0.1:8000/laoguo/',
    type:'get',
    data:{'name':'laoguo'},
    dataType:'jsonp',
    success:function func(data){
    if(data.res == 0){
    alert('get')
    }else{
    alert('error')
    }
    },
    error:function func(data){
    alert(data.res)
    }
    })
    sublime
        26
    sublime  
       2018-03-03 23:06:03 +08:00 via iPhone
    @bmcjxhgwy 你直接搜索关键字 django jsonp
    g8287694
        27
    g8287694  
       2018-03-04 10:20:14 +08:00
    我记得 jsonp 的返回值是有时间戳的吧?
    zhwithsweet
        28
    zhwithsweet  
       2018-03-04 15:28:26 +08:00 via iPhone
    jsonp 技术有点老了,建议 cors
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2630 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 12:59 PVG 20:59 LAX 05:59 JFK 08:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86