0

まず、ここで多くの投稿を読みましたが、この$.ajax と JSONPを含め、自分のコードには問題が見つかりませんでした。ParseError および Uncaught SyntaxError: Unexpected token :

私は Safari 拡張機能を構築しており、サーバーに投稿/取得して応答を処理する必要があります。Safari が次のエラーをスローしています。

SyntaxError: Unexpected token ':'

そしてこのメ​​ッセージ

"handle was not called"

'handle' は、この拡張コードのコールバックです。

var server="http://localhost:3001/api/login";
$.ajax({
       type : "GET",
       url :  server,
       data: {"something" : "else"}
       dataType: 'jsonp',
       jsonp:false,
       jsonpCallback: 'handle',
       success: function(data, text){
        var json = $.parseJSON(data);
        console.log(json)
       },
       error: function (request, status, error) {
        console.log(error );
       }  
});

Express.js (2.5.5) コードは次のとおりです。

//in the config
app.set( "jsonp callback", true )

app.all('/', function(req, res, next){
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();
});

app.get('/api/login', function(req, res){
res.json(
  {
    "success": {"that":"this"}
  }
);
});

注: res.jsonp、コンテンツ タイプの設定などを試しましたが、同じ応答がありました。その過程で CORS と Ajax について TON を学びましたが、私の目は明らかにかすみ目です。かかとを 3 回クリックしても効果はありませんでした。

手がかり?ありがとう!

4

1 に答える 1

2

を設定dataType: 'jsonp'すると、すでに JSON が解析されます。jsonp: true間違っています。このコンボは機能するはずです:

JSONP

$.ajax({
   url : "http://localhost:3001/api/login",
   data: {"something" : "else"},
   dataType: 'jsonp',
   success: function(data){
     // It is already an object, don't parse it again.
     console.log(data)
   },
   error: function (request, status, error) {
     console.log(error );
   }  
});

app.get('/api/login', function(req, res){
  res.jsonp({
    "success": {"that":"this"}
  });
});

// Remove this:
app.set( "jsonp callback", true )

CORS ブラウザーと JSON:

$.ajax({
   url : "http://localhost:3001/api/login",
   data: {"something" : "else"},
   dataType: 'json',
   success: function(data){
     // It is already an object, don't parse it again.
     console.log(data)
   },
   error: function (request, status, error) {
     console.log(error );
   }  
});

// This is 'app.use', not 'app.all'.
app.use('/', function(req, res, next){
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();
});

app.get('/api/login', function(req, res){
  res.json({
    "success": {"that":"this"}
  });
});
于 2013-03-27T15:35:09.463 に答える