0

Как перекрестные запросы домена работают в IE8? Целевой запрос наКак выполнять перекрестные запросы домена в IE8?

http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true_or_false 

Я попытался с помощью $ .getJSON и $ .ajax и они работали на IE9/10 и FF и хром. Однако это не сработает для IE8. Я прочитал некоторые из сообщений, связанных с получением XHR и после включения флага cors в настройках ajax, я смог выполнить вызов. Однако мой callback никогда не вызывался.

Я получил его позже, используя API геокодирования Google. Тем не менее, я хотел бы знать, как заставить это работать без API

Благодаря -Venu

+0

вы можете включать в свой код JavaScript вместе с тем, как вы настраиваете свой обратный вызов? – monsur

ответ

0

Я был также сталкивается этот вопрос (не уверен, о целевом браузере), но используя код ниже, я получил ее решить .. Используйте этот код прежде, чем сделать запрос междоменного

if (!jQuery.support.cors && window.XDomainRequest) { 
    var httpRegEx = /^https?:\/\//i; 
    var getOrPostRegEx = /^get|post$/i; 
    var sameSchemeRegEx = new RegExp('^' + location.protocol, 'i'); 
    var xmlRegEx = /\/xml/i; 

    // ajaxTransport exists in jQuery 1.5+ 
    jQuery.ajaxTransport('text html xml json', function (options, userOptions, jqXHR) { 
     // XDomainRequests must be: asynchronous, GET or POST methods, HTTP or HTTPS protocol, and same scheme as calling page 
     if (options.crossDomain && options.async && getOrPostRegEx.test(options.type) && httpRegEx.test(userOptions.url) && sameSchemeRegEx.test(userOptions.url)) { 
      var xdr = null; 
      var userType = (userOptions.dataType || '').toLowerCase(); 
      return { 
       send: function (headers, complete) { 
        xdr = new XDomainRequest(); 
        if (/^\d+$/.test(userOptions.timeout)) { 
         xdr.timeout = userOptions.timeout; 
        } 
        xdr.ontimeout = function() { 
         complete(500, 'timeout'); 
        }; 
        xdr.onload = function() { 
         var allResponseHeaders = 'Content-Length: ' + xdr.responseText.length + '\r\nContent-Type: ' + xdr.contentType; 
         var status = { 
          code: 200, 
          message: 'success' 
         }; 
         var responses = { 
          text: xdr.responseText 
         }; 

         try { 
          if (userType === 'json') { 
           try { 
            responses.json = JSON.parse(xdr.responseText); 
           } catch (e) { 
            status.code = 500; 
            status.message = 'parseerror'; 
            //throw 'Invalid JSON: ' + xdr.responseText; 
           } 
          } else if ((userType === 'xml') || ((userType !== 'text') && xmlRegEx.test(xdr.contentType))) { 
           var doc = new ActiveXObject('Microsoft.XMLDOM'); 
           doc.async = false; 
           try { 
            doc.loadXML(xdr.responseText); 
           } catch (e) { 
            doc = undefined; 
           } 
           if (!doc || !doc.documentElement || doc.getElementsByTagName('parsererror').length) { 
            status.code = 500; 
            status.message = 'parseerror'; 
            throw 'Invalid XML: ' + xdr.responseText; 
           } 
           responses.xml = doc; 
          } 
         } catch (parseMessage) { 
          throw parseMessage; 
         } finally { 
          complete(status.code, status.message, responses, allResponseHeaders); 
         } 
        }; 
        xdr.onerror = function() { 
         complete(500, 'error', { 
          text: xdr.responseText 
         }); 
        }; 
        xdr.open(options.type, options.url); 
        //xdr.send(userOptions.data); 
        xdr.send(); 
       }, 
       abort: function() { 
        if (xdr) { 
         xdr.abort(); 
        } 
       } 
      }; 
     } 
    }); 
}; 

jQuery.support.cors = true; 

var composite = { 
    BoolValue: true, 
    StringValue: "Hello " 
}; 

$.ajax({ 
    type: "POST", 
    contentType: "application/json", 
    url: targetURL, 
    data: JSON.stringify(composite), 
    datatype: "jsonp", 
    //crossDomain :true, 
    success: function (data) { 
     alert("success!!::" + JSON.stringify(data)); 
    }, 
    error: function (xhr, status, error) { 
     alert("error!!::" + JSON.stringify(xhr)); 
    } 
});