关于phonegap错误的getJSON

时间:2015-10-31 21:39:00

标签: jquery json ajax cordova getjson

http://example.com/json.js

{
    "employees": [
        {
            "firstName": "John",
            "lastName": "Doe"
        },
        {
            "firstName": "Anna",
            "lastName": "Smith"
        },
        {
            "firstName": "Peter",
            "lastName": "Jones"
        }
    ]
}

和ajax:

<script>
(function() {
  var jsonurl = "http://example.com/json.js";
  $.getJSON( jsonurl , {
    format: "json"
  })
    .done(function( data ) {
      $.each( data.items, function( i, item ) {
        $( "#mydiv" ).append( item.employees.firstname+" - "+item.employees.lastname+"<br>" );
        if ( i === 3 ) { //number of items
          return false;
        }
      });
    });
})();
</script>

但这不起作用。 我在控制台上收到此错误:

  

XMLHttpRequest无法加载http://example.com/last.js?format=json。没有   请求中存在“Access-Control-Allow-Origin”标头   资源。因此不允许来源“http://192.168.1.3:3000”   访问。

所以我读过我必须像这样更改网址

http://example.com/json.js?jsoncallback=?

错误gones但是控制台中的新错误:

  

Uncaught SyntaxError:意外的令牌:   http://example.com/last.js?jsoncallback=jQuery111306243502511642873_1446327132484&format=json&_=1446327132485

2 个答案:

答案 0 :(得分:1)

使用PHP读取json文件以允许Access-Control-Allow-Origin

    <?php
     if (isset($_SERVER['HTTP_ORIGIN'])) {
     header("Access-Control-Allow-Origin: *");
     header('Access-Control-Allow-Credentials: true');    
     header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); 
     }   

     if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
     if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
     header("Access-Control-Allow-Methods: GET, POST, OPTIONS");         
     if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
     header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
     exit(0);
     }
    $myfile = fopen("json.js", "r") or die("Unable to open file!");
    echo fread($myfile,filesize("json.js"));
    fclose($myfile);
   ?>

答案 1 :(得分:-1)

将以下行添加到.htaccess文件中:

Header set Access-Control-Allow-Origin "*"

这会将CORS添加到服务器中提供的所有文件中,允许您的跨域请求返回文件内容。