AJAX在获取请求时失败:JSONP

时间:2012-08-22 17:35:09

标签: jquery ajax json jsonp

我在运行我的django应用程序的同一主机上运行了一个休息服务器(python bottle)。 从我的django应用程序我正在使用ajax执行get请求,但请求失败,即使我可以在我的休息服务器上看到请求的状态成功(返回代码200,成功)

我的Ajax代码:

            $.ajax({
               url: 'http://hostname:port/ListVms/',
               crossDomain: true, 
               contentType: "application/json",
               dataType: 'jsonp',
               success: function(data) {
                   alert('worked');
               },
               error: function() {
                   alert("Sorry, error retrieving!");
               }
           });

Python Rest方法:

            @route('/ListVms/', method='GET')
            def get_event():
                return json.dumps(JS)

休息服务的输出:

            [22/Aug/2012 10:25:45] "GET /ListVms/?callback=jQuery17102901058990901989_1345656355311&_=1345656355356 HTTP/1.1" 200 44

1 个答案:

答案 0 :(得分:5)

我猜你的服务器正在返回JSON,如下所示:

{ "abc": 123 }

此格式与JSONP不兼容。 JSONP需要一个传递JSON的回调函数。回调函数将在该查询字符串中传递给您的服务器。

因此,使用JSONP,浏览器会像这样下载脚本标记:

<script src="http://hostname:port/ListVms/?callback=jQuery17102901058990901989_1345656355311"></srcipt>

您的服务器应该回复:

jQuery17102901058990901989_1345656355311({
  "abc": 123
});

通常,服务JSON并希望支持JSONP的服务器的条件看起来像这样:

if queryString.callback
  render queryString.callback + "(" + jsonData + ")"
else
  render jsonData