0

私はJavaScriptでこのコードを持っています

var url = 'http://mydomain.com:3000';
url += "/user";

jQuery.ajax({
  url: url,
  type: "GET",
  dataType: "jsonp",
  async: false,
  success: function (data) {alert(1);
    console.log(data);
  }
});

私のサイトはhttp://mydomain.com:80で実行されているため、同じサーバーにはありません。

http://mydomain.com:3000は nodejs によってコードで提供されます

app.get('/user',function(req,res){    
  var result = {
    result:-1
  };
  res.json(result);
  res.writeHead(200, {"Content-Type": "application/json"});
});

ajax を呼び出すと、Chrome プレビューの応答から得られます

{
  "result": -1
}

しかし、JavaScriptのコンソールでエラーが発生しました

Uncaught SyntaxError: Unexpected token : user:2

警告メッセージは表示されません。

私もnodejsで試しました

res.end("'"+JSON.stringify(result)+"'");

クロムプレビューの応答は

'{"result":-1}'

コンソールエラーはなくなりましたが、それでもアラートはトリガーされません

4

1 に答える 1

0

res.json()すぐに応答を送信します。これを使用する前にヘッダーを設定する必要があります。

res.json(result);
res.writeHead(200, {"Content-Type": "application/json"}); //Response already sent before.

そのres.writeHead()ため、応答にヘッダーを設定しません。表示されるエラーは、応答に不正な文字コードが含まれていることを意味します。

キャッチされていない SyntaxError: 予期しないトークン: user:2

前にヘッダーを設定してみてください。ブラウザはメッセージを JSON として正しく識別します。

アップデート

あなたのコードをもう一度チェックすると、応答を として送信していることがres.json()わかりましたが、AJAX ではとして受信していますjsonpjson2つは異なりjsonpます。res.jsonp()ノードで使用できるがあり、AJAX クエリのデータ型を として変更しますjson

于 2013-03-09T13:52:58.153 に答える