jQuery mobile:JSONP请求使用$ .ajax(),$ .getJSON不触发回调函数

时间:2012-07-28 08:48:09

标签: jquery ajax mobile

我尝试从我的网络服务器获取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');

1 个答案:

答案 0 :(得分:2)

你的回答不是JSONP:它只是一个JSON数组。

如果您将datatype来电中的ajax更改为'json',那么您的回叫应该会被触发。

但是如果你真的需要使用JSONP - 如果你正在尝试进行跨站点通信 - 那么你需要返回有效的JSONP作为你的服务器响应。您的服务器需要使用javascript函数调用形式的字符串进行响应,使用jsonp参数的值作为函数名称,并使用JSON响应作为函数参数。