【问题标题】:jQuery getJSON won't work on live url [duplicate]jQuery getJSON不适用于实时网址[重复]
【发布时间】:2013-02-05 07:06:17
【问题描述】:

可能重复:
JSONP request: “Resource interpreted as Script but transferred with MIME type text/html”

任何人都可以让我知道我在这里做错了什么。

这是本地 URL / localhost 上带有 json 文件的代码。而且这项工作没有问题

(function() {
    var json_url = 'http://localhost:8888/MOD/some-folder/app/mysql-to-json.php?page=index';

    $.getJSON(json_url, function(data){
        $.each(data, function(i, item) {
            $('#state-list').append('<li><a href="display.html?state=' + item.d_state  + '" data-transition="slide" rel="external">' + see_abbrv(item.d_state) + '</a></li>');
        });
        $('#state-list').listview('refresh'); 
    });
}) ();

但是当我这样做时,我刚刚将 json_url 更新为来自本地主机的 json_url 的实时 url。

数据不会显示。当我尝试检查页面时出现警告:

资源解释为脚本,但使用 MIME 类型 text/html 传输:“http://www.live-server.com/app/mysql-to-json.php?page=index&callback=jQuery18201751285600475967_1360047415705&_=1360047415772”。

使用实时网址更新代码:

(function() {
    var json_url = 'http://www.live-server.com/app/mysql-to-json.php?page=index&callback=?';

    $.getJSON(json_url, function(data){
        $.each(data, function(i, item) {
            $('#state-list').append('<li><a href="display.html?state=' + item.d_state  + '" data-transition="slide" rel="external">' + see_abbrv(item.d_state) + '</a></li>');
        });
        $('#state-list').listview('refresh'); 
    });
}) ();

【问题讨论】:

  • 在本地代码上,您进行了 ajax json 调用,但在实时代码上,您进行了 jsonp 调用,这完全不同。
  • 资源/路径是否驻留在您当前的应用程序中?在这种情况下,您应该使用相对路径。
  • 不确定这是否是唯一的原因,但如果您可以控制服务器,则应将 jsonp 请求的响应的 mime 类型设置为“application/javascript”。您确定 url 实际上返回 jsonp 吗?显然,如果 jQuery 在 url 中看到 ?callback 它会自动将请求视为 jsonp。
  • Content-Type text/html 尝试按照我的回答将其设置为 applicatio/json

标签: javascript jquery getjson


【解决方案1】:

OP 需要跨源脚本,而且差不多了,我们更改了 PHP 文件以生成 JSONP:

header('contentType: application/javascript');
print $_GET["callback"]."(". json_encode($rows) .");";

并将 JavaScript 改回以包含参数“&callback=?”

(function() {
    var json_url 
        = 'http://www.live-server.com/app/mysql-to-json.php?"
            +"page=index&callback=?';
    $.getJSON(json_url, function(data){
        $.each(data, function(i, item) {
            $('#state-list').append('<li><a href="display.html?state=' 
                + item.d_state  
                + '" data-transition="slide" rel="external">' 
                + see_abbrv(item.d_state) + '</a></li>');
        });
        $('#state-list').listview('refresh'); 
    });
}) ();

【讨论】:

  • 消除页面检查警告,但数据仍然没有显示/仍然错误。
  • 此错误..“资源解释为脚本,但使用 MIME 类型 text/html 传输:“live-server.com/app/…。”
  • 是的..
  • 需要的不是脚本,而是引用脚本的html或php页面。如果您使用的是 firefox,则可以使用 forcecors 插件向任何站点发出 xmlhttprequest。安装后点击view=>toolbar=>add on bar。在屏幕的右下角,您可以看到“cors”,当您单击它时,它应该变成红色。现在您可以从任何站点向任何站点发出 xmlhttprequest。
  • 我确实在php文件中添加了标头,它是删除警告,但数据仍然没有显示或没有产生任何输出。
【解决方案2】:

在标题中添加这个

header('Content-type: text/javascript');

如果你使用它并且它在 php 上,它会在输出生成 json 文件。

print $_GET["callback"]."(". json_encode($rows) .")";

这个到json文件的url结尾

&callback=?

感谢一百万 MHR 解决了这个问题.. 谢谢一堆兄弟.. :-)

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2013-10-07
    • 1970-01-01
    相关资源
    最近更新 更多