【问题标题】:AJAX failing on get request: JSONPAJAX 获取请求失败:JSONP
【发布时间】:2012-08-23 01:45:45
【问题描述】:

我在运行我的 django 应用程序的同一主机上运行了一个休息服务器(python 瓶)。 从我的 django 应用程序中,我正在使用 ajax 执行获取请求,但即使我可以在我的休息服务器上看到请求的状态成功(返回代码 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

【问题讨论】:

  • 服务器返回什么数据?包裹在回调函数中的数据是 jQuery 要求包裹的吗?

标签: jquery ajax json jsonp


【解决方案1】:

我猜你的服务器正在返回 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

【讨论】:

    猜你喜欢
    • 2015-06-22
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 2018-11-30
    • 2017-03-10
    • 2016-08-29
    相关资源
    最近更新 更多