【问题标题】:JSON received but error for "Resource interpreted as Script but transferred with MIME type application/json"收到 JSON 但错误“资源解释为脚本但使用 MIME 类型应用程序/json 传输”
【发布时间】:2011-07-06 05:36:00
【问题描述】:

我正在解析一个JSON文件并将数据添加到HTML下拉列表中,代码如下,

$.getJSON(
    "http://mobile.icta.lk/services/railwayservice/getAllLines.php?lang=en&jsoncallback=?",
    function(data) {

        var $s = $('.txtline').empty();

        // the actual contents of this loop will be
        // specific to the data
        for (var k in data) {
            $('<option></option>')
                .val(data[k].value)
                .text(data[k].text)
                .appendTo($s);
        }
    }
)

我得到一个错误,

Resource interpreted as Script but transferred with MIME type application/json.

getAllLines.php:2Uncaught SyntaxError: Unexpected token :

【问题讨论】:

  • 服务器返回的内容是{还是jQueryLOTSOFNUMBERS({开头的?
  • @SalmanA 自己查一下(不要听起来太狡猾)

标签: jquery html json


【解决方案1】:

问题是这个远程服务器返回 JSON,而不是 JSONP。它返回:

{"lines":[{"line":"COLOMBO - BADULLA"},{"line":"COLOMBO - MATALE"},{"line":"COLOMBO - PUTTLAM"},{"line":"COLOMBO - THANDIKULAM"},{"line":"COLOMBO - TALAIMANNAR"},{"line":"COLOMBO - BATTICALOA"},{"line":"COLOMBO - TRINCOMALEE"},{"line":"COLOMBO - MATARA"},{"line":"COLOMBO - AVISSAWELLA"},{"line":"COLOMBO - MIHINTALE"}]}

代替:

someCallbackName({"lines":[{"line":"COLOMBO - BADULLA"},{"line":"COLOMBO - MATALE"},{"line":"COLOMBO - PUTTLAM"},{"line":"COLOMBO - THANDIKULAM"},{"line":"COLOMBO - TALAIMANNAR"},{"line":"COLOMBO - BATTICALOA"},{"line":"COLOMBO - TRINCOMALEE"},{"line":"COLOMBO - MATARA"},{"line":"COLOMBO - AVISSAWELLA"},{"line":"COLOMBO - MIHINTALE"}]})

除非远程资源支持 JSONP,否则您将无法使用 AJAX 使用远程域。

【讨论】:

  • 但他实际上并没有收到 jsonp 也没有要求,是吗?
  • @jcolebrand,我想他是在要求它。否则为什么他在定义他的 url 时会使用绝对路径?恕我直言,这是一个跨域 AJAX 问题。
  • 我注意到这一点,以及它使用 ? 调用 jsoncallback 的事实。参数,但这可能只是强迫它调用正确的东西。但是,这是我自己在 Q 上注意到的第一件事。
  • @Sudantha,有两种可能性:要么此服务器支持 JSONP,如我的答案所示,在这种情况下,您可以使用 jQuery 直接使用它,否则您需要在您的服务器上编写服务器端桥接脚本调用远程域然后让 jQuery 向您的服务器端脚本而不是远程域发送一个简单的 AJAX 请求的域:$.getJSON('/myscript', function(data) { ... });
  • @sudanta:尝试搜索 json 代理 php 脚本。我还发布了一个答案......一个非常原始的 PHP 脚本可以完成这项工作。
【解决方案2】:

这是一个小脚本:

<?php
    // file url: http://localhost/remote-json-proxy.php
    $url = 'http://mobile.icta.lk/services/railwayservice/getAllLines.php';
    $qsa = '?';
    foreach($_GET as $n => $v) {
        if($n != 'callback') {
            $qsa .= '&' . $n . '=' . rawurlencode($v);
        }
    }
    $json = file_get_contents($url . $qsa);
    echo sprintf('%s(%s);', $_GET['callback'], $json);
?>

用法:

<!-- file url: http://localhost/test.htm -->
<script type='text/javascript'>
    $.getJSON('remote-json-proxy.php?lang=en&this=that&callback=?', function(data) {
        console.log(data);
    })
</script>

【讨论】:

  • 感谢萨尔曼生病执行此代码并接受 asnwer .. 我有一个问题可以将 remote-json-proxy.php 保留在远程服务器中而不是 test.htm 吗?
  • 我认为如果你把它放到另一个服务器上它仍然可以工作,因为脚本返回 JSONP。
  • 非常好,它返回一个object 现在应该找到将其填充到下拉列表的方法
猜你喜欢
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 2017-03-19
  • 2017-07-10
  • 2011-07-11
相关资源
最近更新 更多