【问题标题】:AJAX JSONP Failure returns statustext "success", correct callbackAJAX JSONP 失败返回状态文本“成功”,正确回调
【发布时间】:2014-09-14 17:28:25
【问题描述】:

我知道以前有人问过这个问题,但似乎无法弄清楚。我有一个托管 python 脚本的 IIS 6.0 服务器。这就是 python 脚本返回的内容...... 它将字典列表转换为 json 对象,设置标题并返回数据。

try:
    name
    allergy = json.dumps(sorted(var_allergies, key=operator.itemgetter('name'),reverse=True))    
    print "Content-type: application/json"
    print
    print allergy

My ajax call is: 
    function AllergyPyJSON() {
        var url ="http://hostname/cgi-bin/allergies.py?callback=?"
        $.ajax({
            type: "GET",
            url: url,
            data: { 'user_id': $('#user').val() },
            cache: false,
            async: false,
            jsonpCallback: 'jsonCallback',
            jsonp: true,
            dataType: 'jsonp', 
            contentType: "application/json; charset=utf-8",   
            success: function (json) {           
                alert(json)
            }
        }).done(function (r) {
            //alert('done');
        }).fail(function (r) {
            alert(JSON.stringify(r));
        })
    }

响应命中失败方法。 {"readyState:4,"status":200,"statusText":"success"}

如果我使用调试器或查看 chrome - 控制台 - 网络...我会看到

的调用和响应
[{"date": "2014-02-20 10:49:47", "reaction": "None", "name": "Dilantin"}]

所以它正在调用函数并返回正确的数据。 如何访问回调中的数据?或者为什么它失败并且仍然返回数据?

在此处编辑是返回标题

Remote Address:100.100.200.200:80
Request URL:http://server/cgi-bin/allergies.py?callback=?&pat_id=0009689&_=1406123902467
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Host:hh-borpt
Referer:http://localhost:42972/Forms/page.htm
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Query String Parametersview sourceview URL encoded
callback:?
pat_id:0009689
_:1406123902467
Response Headersview source
Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Methods:POST, GET, OPTIONS
Access-Control-Allow-Origin:*
Access-Control-Expose-Headers:Access-Control-Allow-Origin
Connection:close
Content-Type:application/json
Date:Wed, 23 Jul 2014 13:58:20 GMT
Server:Microsoft-IIS/6.0

编辑我想通了: 我需要在我的 ajax 调用中包含 jsonpCallback: 'jsoncallback'

在python方面

print "Content-type: application/json"
print
print "jsonCallback(%s)" % allergy

现在它在函数中返回数据包装器(填充)并且它正在工作。成功函数使用 json 对象触发。

jsonCallback({"date": "2014-02-20 10:49:47", "reaction": "None", "name": "Dilantin"})

【问题讨论】:

    标签: python ajax json iis jsonp


    【解决方案1】:

    编辑我想通了:我需要在我的 ajax 调用中包含 jsonpCallback: 'jsoncallback'

    在我的 python 代码中,我必须在 json 对象周围包含函数名称。

    print "Content-type: application/json"
    print
    print "jsonCallback(%s)" % allergy
    

    现在它在函数中返回数据包装器(填充)并且它正在工作。成功函数使用 json 对象触发。

    jsonCallback({"date": "2014-02-20 10:49:47", "reaction": "None", "name": "Dilantin"})
    

    【讨论】:

      【解决方案2】:

      您的“JsonPCallback”在哪里,您声称回调应该是一个名为“JsonCallback”的函数,但您的帖子中没有包含该函数。尝试删除该行,让 json 流向您已经构建的成功方法。

      试试这个:

      function AllergyPyJSON() {
          var url ="http://hostname/cgi-bin/allergies.py?callback=?"
          $.ajax({
              type: "GET",
              url: url,
              data: { 'user_id': $('#user').val() },
              cache: false,
              async: false,
              jsonp: true,
              dataType: 'jsonp', 
              contentType: "application/json; charset=utf-8",   
              success: function (json) {           
                  alert(json)
              }
          }).done(function (r) {
              //alert('done');
          }).fail(function (r) {
              alert(JSON.stringify(r));
          })
      }
      

      【讨论】:

      • 嗨,对不起,我没有包含我的 jsoncallback。无论如何,我删除了 jsonpcallback 行并让 jquery 创建一个随机回调函数。请求 url 为 Request URL:hh-borpt/cgi-bin/… 数据为:{"lname": "IFORM", "mrn": "000104936", "patientid": "0009689", "fname": "TEST PATIENT"}。但是仍然调用了失败函数。它可能不相关,但控制台正在显示:Uncaught SyntaxError: Unexpected token :
      • 尝试在 python 端发送 json.dumps("hello")。控制台日志是干净的(没有错误)...但仍然调用 ajax 失败。
      • 你确定你的 Json 是有效的吗?也可能是本地头问题,看看这个:stackoverflow.com/questions/20847008/…
      • 这是无效的......它期望收到一个包装在函数 (jsonp) 中的 json 对象,而我只是向它发送了一个 json 对象。查看我的最后一次编辑以了解它是如何解决的。我必须指定回调名称,并在 python 中在我的打印语句中包含该函数名称......之后它开始工作。
      猜你喜欢
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 2015-01-31
      • 2011-02-14
      • 2015-06-14
      相关资源
      最近更新 更多