2

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

我的阿贾克斯代码:

            $.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 休息方法:

            @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
4

1 回答 1

5

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

{ "abc": 123 }

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

因此,使用 JSONP 浏览器会像下面这样写一个脚本标签:

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

您的服务器应该对此做出响应:

jQuery17102901058990901989_1345656355311({
  "abc": 123
});

Typically servers that serve JSON and want to support JSONP have a conditional that looks kind of like this:

if queryString.callback
  render queryString.callback + "(" + jsonData + ")"
else
  render jsonData
于 2012-08-22T17:45:45.323 回答