0

ポート8081でhttpサーバーを実行していて、getJSONjQuery関数を使用してJSONを取得しようとしています。しかし、常にクロスドメイン(CORS)の問題で実行されています。JSONPを使用することを考えていましたが、node.jsスクリプトにJSONPを実装する方法がわかりません。

  headers["Access-Control-Allow-Origin"] = "*";
  headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS";
  headers["Access-Control-Allow-Credentials"] = false;
  headers["Access-Control-Allow-Headers"] = "Content-Type,X-Requested-With, X-PINGOTHER";
  headers["Access-Control-Max-Age"] = 86400;
  response.writeHead(200, headers);
  var objToJson = {"response":res };
  response.write(JSON.stringify(objToJson));

これは私のクライアント側のコードです。

    jQuery.getJSON('http://localhost:8081', function(data) {
    console.log(data);
    }); 
4

2 に答える 2

1

この PHP スクリプトを適応させることができます。ロジックは非常に単純です。クレジット: https://stackoverflow.com/a/1678243

if (array_key_exists('callback', $_GET)) {
    // JSONP String
    header('Content-Type: text/javascript; charset=utf8');
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Max-Age: 0');
    header('Access-Control-Allow-Methods: GET');

    $callback = $_GET['callback'];
    echo $callback . '(' . $data . ');';
} else {
    // JSON String
    header('Content-Type: application/json; charset=utf8');
    echo $data;
}
于 2012-11-20T10:00:19.410 に答える
0

No idea what you're doing wrong, but I copied your code, filled the blanks and it worked for me (on Firefox 16 and Chrome 24).

Here is my CORS demo:

  • app.js

    var http = require('http');
    
    http.createServer(function(request, response) {
      var headers = {};
      headers["Access-Control-Allow-Origin"] = "*";
      headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS";
      headers["Access-Control-Allow-Credentials"] = false;
      headers["Access-Control-Allow-Headers"] = "Content-Type,X-Requested-With, X-PINGOTHER";
      headers["Access-Control-Max-Age"] = 86400;
    
      response.writeHead(200, headers);
      var objToJson = {"response": "hello cors" };
      response.write(JSON.stringify(objToJson));
      response.end()
    }).listen(8081)
    
  • index.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=utf-8 />
    <title>CORS demo</title>
    </head>
    <body>
      view results in the console
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.js"></script>
      <script type=text/javascript>
        jQuery.getJSON('http://localhost:8081', function(data) {
          console.log(data);
        });
      </script>
    </body>
    </html>
    
于 2012-11-12T14:29:42.123 に答える