Intereting Posts
различное поведение ключевого слова «это» между node.js и браузерами Назначение деструктуризации массива не работает в v8 с возможностью согласования в Node.js Одна сессия для каждого пользователя – паспорт JS Как подключить файл к письму с помощью nodemailer Контекстное меню: щелкнуть / открыть событие с помощью Atom Shell / Electron? Как область переменных работает в рамках тестовой среды Mocha? Проблема Nodejs async при расшифровке ключей aws kms Оператор N1ql -> IN не работает с другими условиями «PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR» в Node-MySqL Как использовать travis-ci .travis.yml для предоставления параметров среды для приложения Node.js? Как остановить RubyMine / WebStorm от включения node_modules при использовании ‘find in path’ Узел JS Диапазон не устраивает SendStream.error Express Как сделать redirect (301) в Node.js / Express? Node.js, MongoDB – Вставка / обновление нескольких документов и отправка одного ответа Как мы можем создать пользователя с Firebase Auth в node.js?

Междоменный jQuery.getJSON с сервера Node.JS (с использованием express) не работает в Internet Explorer

Это раздражающая проблема, и я не думаю, что это только IE, у которой есть эта проблема. В основном у меня есть сервер Node.js, из которого я делаю междоменные вызовы, чтобы получить некоторые данные JSON для отображения.

Это должен быть вызов JSONP, и я даю обратный вызов в URL-адресе. Что я не уверен, как это сделать?

Таким образом, на веб-сайте (domainA.com) есть HTML-страница с таким JS-скриптом (все отлично работает в Firefox 3):

 var jsonName = 'ABC' var url = 'http://domainB.com:8080/stream/aires/' //The JSON data to get jQuery.getJSON(url+jsonName, function(json){ // parse the JSON data var data = [], header, comment = /^#/, x; jQuery.each(json.RESULT.ROWS,function(i,tweet){ ..... } } ......  

Теперь мой Node.js-сервер очень прост (я использую express):

 var app = require('express').createServer(); var express = require('express'); app.listen(3000); app.get('/stream/aires/:id', function(req, res){ request('http://'+options.host+':'+options.port+options.path, function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body); // Print the google web page. res.writeHead(200, { 'Content-Type': 'application/json', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true' }); res.end(JSON.stringify(JSON.parse(body))); } }) }); 

Как я могу изменить эти два, чтобы они работали с кросс-доменным GET в IE? Я искал в Интернете, и, похоже, есть несколько разных вещей, таких как jQuery.support.cors = true; который не работает. Там также, кажется, много длительных обходных решений.

Не существует реального «идеального» шаблона дизайна, который я смог найти для этого типа вещей.

Видя, как я контролирую как веб-страницу, так и веб-сервис кросс-домена, я отправляю на то, что лучше всего сделать для обеспечения совместимости во всех версиях IE вместе с FireFox, Opera, Chrome и т. Д.?

Ура!

Скажем, у нас есть два сервера: myServer.com и crossDomainServer.com, оба из которых мы контролируем.

Предполагая, что мы хотим, чтобы клиент myServer.com извлекал некоторые данные с сайта crossDomainServer.com, сначала клиент должен сделать запрос JSONP на crossDomainServer.com:

 // client-side JS from myServer.com // script tag gets around cross-domain security issues var script = document.createElement('script'); script.src = 'http://crossDomainServer.com/getJSONPResponse'; document.body.appendChild(script); // triggers a GET request 

На междоменном сервере нам необходимо обработать этот запрос GET:

 // in the express app for crossDomainServer.com app.get('/getJSONPResponse', function(req, res) { res.writeHead(200, {'Content-Type': 'application/javascript'}); res.end("__parseJSONPResponse(" + JSON.stringify('some data') + ");"); }); 

Тогда в нашей клиентской стороне JS нам нужна глобальная функция для анализа ответа JSONP:

 // gets called when cross-domain server responds function __parseJSONPResponse(data) { // now you have access to your data } 

Работает хорошо в самых разных браузерах, включая IE 6.

В следующем коде показано, как обрабатывать запрос GET (с помощью express) и как обернуть ответ JSON с помощью обратного вызова:

 app.get('/foo', function(req, res){ res.header('Content-Type', 'application/json'); res.header('Charset', 'utf-8') res.send(req.query.callback + '({"something": "rather", "more": "pork", "tua": "tara"});'); });