gpt4 book ai didi

jquery - 为什么 jQuery ajax jsonp 请求给出错误?

转载 作者:行者123 更新时间:2023-12-01 08:14:37 26 4
gpt4 key购买 nike

"fnServerData": function( sUrl, aoData, fnCallback, oSettings ) {
oSettings.jqXHR = $.ajax( {
"url": sUrl,
"data": aoData,
"success": fnCallback,
"error":function(msg){
alert(msg);
},
"dataType": "jsonp",
"cache": false
} );
},

当我发出该请求时,服务器会给出该响应。

Status Code: 200 OK
Cache-Control: max-age=0
Content-Language: en
Content-Type: application/javascript
Expires: Thu, 12 Jul 2012 06:23:18 GMT
Last-Modified: Thu, 12 Jul 2012 06:23:18 GMT
Vary: Accept-Language, Cookie

以及响应正文中的 json 数据。

但是ajax代码说它有一个错误,并进入“错误”代码块。

为什么状态为 200 时出错?

更新:

在 Django 服务器代码中:

            response_dict = {}                
response_dict.update({'aaData': aaData})
response_dict.update({'sEcho': sEcho, 'iTotalRecords': iTotalRecords, 'iTotalDisplayRecords':iTotalDisplayRecords, 'sColumns':sColumns})
response = HttpResponse(simplejson.dumps(response_dict), mimetype='application/javascript')

最佳答案

服务器响应是否包含带填充的 JSON?

你看,有两种方法可以从不同的域接收数据:

  1. CORS是新的,但需要从服务器发送单独的 Access-Control-Allow-Origin header 。浏览器支持也受到一定程度的限制。

  2. JSONP不依赖服务器 header ,而是要求它使用所谓的'padding'发送回 JSON 数据:

    callback('{"your": ["json", "data"}')

    然后,您的 JavaScript 库(在本例中为 jQuery)将其包装到一个新的 script 标记中,欺骗您的浏览器对其进行评估。在这个回调函数中,jQuery 解析 JSON 数据并将其发送到您的 fnCallback。之后,它从页面中删除不必要的 script 标记。一般来说,这是一个非常脆弱的解决方案,但在实践中它是有效的。例如,如果服务器不填充 JSON 数据,您最终会在 script 标记内看到以下代码:

    '{"your": ["json", "data"}'

    请注意,它只是一个字符串并且不执行任何操作。因此,请检查服务器是否发送包装的 JSON,而不是原始 JSON。我以前多次遇到过同样的问题,这对我很有帮助。

<小时/>

编辑:既然您发布了服务器端代码,我假设您可以修改它。我从未玩过 Django,但我会尝试给你提示:

  1. 在您收到的request内应该有一个名为callback的参数 - 这是 jQuery 发送给您的参数以及您应该用于填充的参数。把它放在某个地方:

    # Like I said I don't know the exact API but you get the idea
    callback = request.GET["callback"]
  2. 之后填充您的响应,然后将其发送给客户:

    response = HttpResponse( # Put callback name before the actual JSON
    callback + "(" + simplejson.dumps(response_dict) + ");",
    mimetype='application/javascript')

这应该有效。

关于jquery - 为什么 jQuery ajax jsonp 请求给出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11446297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com