【问题标题】:jsonp crossbrowser mistakes from domain or code side来自域或代码端的 jsonp 跨浏览器错误
【发布时间】:2013-10-22 14:07:25
【问题描述】:

我是 api 和 json 获取数据的新手,所以我有一个关于使用我的网站上的 jsonp 获取信息的问题:http://pda.bilgiteknolojileri.net/ 我知道域名是 pda 而不是 api :) 这不是我的虽然错了,不是我的域,但我可以管理它们,反正我有代码:

    var url='http://pda.bilgiteknolojileri.net';
    $.ajax({
        type: "GET",
        url: url,
        dataType: 'jsonp',
        jsonp: 'jsonp',
        crossDomain: true,
        success: function(cats) {
            $.each(cats.data, function(i, data) {
                var cat=data.cat;
                var cat_id=data.cat_id;
                $('#category').append('<option value="'+cat_id+'">'+cat+'</option>');
            });
        }
    });

据我了解,代码没问题,但控制台出现错误: Uncaught SyntaxError: Unexpected token &lt; 和第二个不大的错误 Resource interpreted as Script but transferred with MIME type text/html 我做错了什么?是域方面的跨浏览器错误还是我在代码中的错误?

请求标头:

GET /?callback=jQuery182007281651743687689_1382452295311&_=1382452295320 HTTP/1.1
Host: pda.bilgiteknolojileri.net
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
DNT: 1
Accept-Encoding: gzip,deflate,sdch
Accept-Language: tr,en-US;q=0.8,en;q=0.6,ru;q=0.4
Cookie: fbm_224237501004640=base_domain=.bilgiteknolojileri.net; CFID=337971; CFTOKEN=5130db21daca4ae5-BE9FEE21-0FA8-399A-7485246A32933BCE; JSESSIONID=7030f7b10f91d2d2d0ce10456f5c7a302350; WRK_COOKIE_ID=BE9FF125%2DA082%2D5206%2DD01747735EADD58B; __utma=56243896.53108638.1381244578.1382443118.1382450419.21; __utmc=56243896; __utmz=56243896.1381244578.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)

查询字符串参数

callback:jQuery182007281651743687689_1382452295311
_:1382452295320

响应标头:

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 22 Oct 2013 14:19:24 GMT

问题是响应是 text/html 格式,应该是 javascript/application,我应该改变什么?我根本无法获得任何数据... 谢谢你的帮助!

【问题讨论】:

  • @megawac 如果我将dataType 更改为json,那么我会出错:XMLHttpRequest cannot load
  • 你从服务器得到什么响应
  • @megawac 你是这个意思吗?响应头:HTTP/1.1 200 OK 传输编码:分块内容类型:text/html; charset=UTF-8 服务器:Microsoft-IIS/7.5 X-Powered-By:ASP.NET 日期:2013 年 10 月 22 日星期二 14:19:24 GMT
  • 好的,您可以在问题中添加响应的预览

标签: jquery ajax json cross-browser jsonp


【解决方案1】:

这里有两个问题:

  1. 服务器响应标头声明 MIME 类型为 text/html
  2. 服务器没有响应 JSONP 对象。这是最大的问题。

服务器正在用 HTML 包装您的 JSON 对象。如果您从以下位置查看响应正文: http://pda.bilgiteknolojileri.net/?callback=jQuery182007281651743687689_1382452295311&_=1382452295320

你会看到它的开头是:

<html>
    <head><meta ...

第一个 &lt; 是导致意外令牌错误的原因。

您的服务器需要响应类似这样的内容:

jQuery182007281651743687689_1382452295311({...JSON OBJECT...})

可以在这里找到更多解释:Confused on how a JSONP request works

之前提到过,但你的问题几乎与这个重复:json Uncaught SyntaxError: Unexpected token :

不同之处在于发送的不仅仅是一个 JSON 对象,而是一个带有 JSON INSIDE 的 html 文档。

【讨论】:

    猜你喜欢
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2013-09-15
    • 2013-09-15
    • 1970-01-01
    • 2013-07-29
    • 2012-08-27
    相关资源
    最近更新 更多