我尝试从我的网络服务器获取JSON数据,但它无法正常工作。
$.mobile.showPageLoadingMsg();
//$.getJSON('http://localhost:8000/'+site+'/?format=json&callback=?', {}, function(){alert();});
$.ajax({
url : 'http://localhost:8000/'+site +'/?format=json&callback=?',
type : 'GET',
dataType : 'jsonp',
jsonp : 'callback',
success : function(){alert('success');},
error : function(){alert('fail')}
});
$.getJSON
,$.ajax
两个方法的回调函数根本没有触发。
问题是什么?
我的网络服务器代码:
response_data.append({
'user_nickname' : post.user_nickname,
'title' : post.title,
'recommend' : post.recommend,
'oppose' : post.oppose,
'date' : str(post.date),
'hit' : post.hit,
'commentcount' : post.commentcount
})
return HttpResponse(simplejson.dumps(response_data), mimetype='application/json')
在insepector中,它返回get
,200,ok,所以HttpResponse
没有问题。
以下是回复:
[{&#34; hit&#34;:5,&#34; title&#34;:&#34; \ uc624 \ ud1a0 \ uc774 \ uc2a4 \ ucf00 \ uc774 \ ud551 \ ub418 \ ub294 \ uac00&#34;, &#34; commentcount&#34;:0,&#34;反对&#34;:0,&#34;推荐&#34;:0,&#34; date&#34;:&#34; 2012-07- 24 07:01:22.453000 + 00:00&#34;,&#34; user_nickname&#34;: &#34; \ ud55c \ uae00 \ ub85c \ uc5bc \ ub9c8 \ ub098 \ uae38 \ uac8c \ uae4c \ uc9c0 \ uac00 \ ub2a5 \ ud558 \ ub7ef \ uc778 \ u3131 \ u3147 \ u3139 \ u3147 \ ub05d&#34;}, {&#34; hit&#34;:4,&#34; title&#34;:&#34; \ uc5ec \ uae30 \ uae00 \ uc4f0 \ uba74?&#34;, &#34; commentcount&#34;:1,&#34;反对&#34;:0,&#34;推荐&#34;:0,&#34; date&#34;:&#34; 2012-07- 24 06:52:05.125000 + 00:00&#34;,&#34; user_nickname&#34;: &#34; \ ud55c \ uae00 \ ub85c \ uc5bc \ ub9c8 \ ub098 \ uae38 \ uac8c \ uae4c \ uc9c0 \ uac00 \ ub2a5 \ ud558 \ ub7ef \ uc778 \ u3131 \ u3147 \ u3139 \ u3147 \ ub05d&#34;}] < / p>
$.ajax()
永远不会触发成功回调函数。它只是调用错误alert('fail');
答案 0 :(得分:2)
你的回答不是JSONP:它只是一个JSON数组。
如果您将datatype
来电中的ajax
更改为'json'
,那么您的回叫应该会被触发。
但是如果你真的需要使用JSONP - 如果你正在尝试进行跨站点通信 - 那么你需要返回有效的JSONP作为你的服务器响应。您的服务器需要使用javascript函数调用形式的字符串进行响应,使用jsonp
参数的值作为函数名称,并使用JSON响应作为函数参数。