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
|