![]() | 1 liuxu 2018-03-03 20:16:50 +08:00 via Android json 应该用双引号 |
2 bmcjxhgwy OP 谢谢,但他还是走 err 我返回的 data 是个 object,但一旦打印 data.res 他就显示 undefined,我觉得是返回的格式不对,但是不知道怎么改 |
3 gongpeione 2018-03-03 20:26:46 +08:00 跨域了? |
4 bmcjxhgwy OP 在 F12 页面上没显示有跨域的问题..... |
5 bmcjxhgwy OP 我用了 jsonp 应该不会有跨域的请求.. |
![]() | 6 loading 2018-03-03 20:30:00 +08:00 via iPhone 返回没指定 mime ? 或者 js 里面先 序列化一下。 jQuery.parseJSON(jsonstr), |
7 bmcjxhgwy OP 序列化了好像也没什么用..... |
![]() | 8 bxb100 2018-03-03 20:40:27 +08:00 via Android 前端用()拼接试试 |
![]() | 9 Yunhao 2018-03-03 20:44:46 +08:00 via iPhone 用 postman 跑一下试试? |
10 dinggk 2018-03-03 20:48:16 +08:00 via Android 后端指定 contenttype text/json |
![]() | 11 summerwar 2018-03-03 20:51:22 +08:00 放代码啊 ,难道靠猜吗?不放代码来截图也行啊 |
![]() | 12 loading 2018-03-03 21:17:19 +08:00 via iPhone 不给代码确实已经没法帮你了。 |
13 Danielfile 2018-03-03 21:25:37 +08:00 via Android 你是在外面打印的吧?要把 async 设置为 false,默认是异步执行请求的。 |
14 bmcjxhgwy OP 这是 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}) |
![]() | 15 misaka19000 2018-03-03 21:35:53 +08:00 看下控制台有没有报错 |
16 xy90321 2018-03-03 21:40:24 +08:00 jquery ?改成下面这样然后设个断点调试下 error: function(data, status, error){ } 总过先看看什么错咯 |
17 sublime 2018-03-03 21:40:27 +08:00 返回的数据格式不对,你这个是 jsonp,需要后台处理下,比如 fn_cb({"res": 0}),不能直接返回 json |
![]() | 19 brickyang 2018-03-03 21:55:23 +08:00 |
20 sublime 2018-03-03 21:57:09 +08:00 @bmcjxhgwy fn_cb 是任意函数名,jsonp 是在前台定义一个函数,后台返回一段 js 代码调用这个函数并传入数据,以此来实现跨域,jquery 应该对返回的数据做了校验,后台返回的数据格式不对,所以进了 err |
![]() | 21 brickyang 2018-03-03 21:59:05 +08:00 另外针对跨域,个人倾向于优先选择 CORS: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS |
22 leamtrop 2018-03-03 22:11:52 +08:00 via Android dataType 属性值改成 JSON 试试 |
![]() | 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 ); 应该问题可以解决了。 |
25 bmcjxhgwy OP @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) } }) |
27 g8287694 2018-03-04 10:20:14 +08:00 我记得 jsonp 的返回值是有时间戳的吧? |
![]() | 28 zhwithsweet 2018-03-04 15:28:26 +08:00 via iPhone jsonp 技术有点老了,建议 cors |