Ajax bericht mislukt op IE

Ik bel ajax.php met jQuery. Het levert voortdurend een JSON-antwoord op.

    $.ajax({
        type: 'POST',
        url: 'ajax.php',
        data: 'some=info',
        dataType: 'json',
        success: function(data) {
            if(data != null) {
                console.log(data);
            } else {
                alert('IE fails here!');
            }
        }
    });

De Ajax retourneert altijd sommige gegevens in JSON-indeling. Het werkt prima op alle browsers behalve IE (getest op IE 7, 8 en 9). In IE wordt altijd de waarschuwing afgedrukt (wat betekent dat deze nooit de responsinformatie ontvangt). Om het even welke ideeën?

Update 1: I just confirmed that the post is never successful in IE, that is why data is always null.

Update 2: the post arrives but returns null only when it is IE.

Update 3 (solution): my fault, the ajax was protecting against calls from other servers. It uses an if() statement at the beginning which asks $_SERVER['HTTP_REFERER']'s host be the host of the same server. Now the question would be, why doesn't IE recognize the $_SERVER['HTTP_REFERER'] in the ajax call?

Dit is de API-code (php)

    if($_SERVER['REQUEST_METHOD'] == 'POST') {
        $security = parse_url($_SERVER['HTTP_REFERER']);
        if(in_array($security['host'],array('localhost','tradukka.com','173.203.198.123'))) {
            header('Content-type: application/json');
            $array = array('nice','data','for','api');
                echo json_encode($translation);
            }
        }
    }

IE mislukt bij de $ _SERVER ['HTTP_REFERER'] controle: s

0
Ik heb zojuist bevestigd dat de post nooit succesvol is in IE, dat is de reden waarom gegevens altijd nul zijn.
toegevoegd de auteur andufo, de bron
console.log (data) genereert nul
toegevoegd de auteur andufo, de bron
pls lees update 3
toegevoegd de auteur andufo, de bron
Probeer console.log (data) na de melding om te zien welke gegevens IE krijgt, indien aanwezig.
toegevoegd de auteur Rocket Hazmat, de bron
maar het is succesvol omdat het de waarschuwing krijgt. Het is gewoon om wat voor reden dan ook null. Heb je geprobeerd om succesvol te zijn: en falen:? U hebt waarschijnlijk ergens anders een fout in de code - IE vindt het niet leuk en de rest negeert het.
toegevoegd de auteur Hubert Jarema, de bron

3 antwoord

de ajax beschermde tegen oproepen van andere servers. Het gebruikt aan het begin een if() -instructie waarin $ _SERVER ['HTTP_REFERER'] 'host de host van dezelfde server wordt. de machines waar ik aan het testen was op IE kregen de naam van de host niet; in plaats daarvan had het de ip-waarde, daarom gooide het altijd fout.

1
toegevoegd

IE is berucht voor caching ajax-verzoeken. Probeer de parameter 'cache: false' aan uw verzoek toe te voegen:

$.ajax({
    type: 'POST',
    cache: false,
    url: 'ajax.php',
    data: 'some=info',
    dataType: 'json',
    success: function(data) {
        if(data != null) {
            console.log(data);
        } else {
            alert('IE fails here!');
        }
    }
});

edit Have you confirmed that there are no JavaScript errors being thrown? Perhaps, being thrown and then caught with a try/catch, so might not be visible from the browser?

0
toegevoegd
geprobeerd dat al, het reageert nog steeds nul. De postactie komt nooit om een ​​of andere reden in ajax.php terecht in IE.
toegevoegd de auteur andufo, de bron
yeap, geen JavaScript fouten. het probleem is wanneer de browser probeert het antwoord op de vraag aan te vragen, op de een of andere manier blijft het de hele tijd nul: s
toegevoegd de auteur andufo, de bron
pls lees update 3
toegevoegd de auteur andufo, de bron
Bekijk bijgewerkte post
toegevoegd de auteur Jake Feasel, de bron

Probeer dit dit toe te voegen voor dataType: 'json'.

 beforeSend: function(x) {
  if(x && x.overrideMimeType) {
   x.overrideMimeType("application/j-son;charset=UTF-8");
  }
 },

Dus het zou er zo uit moeten zien:

$.ajax({
    type: 'POST',
    url: 'ajax.php',
    data: 'some=info',
    beforeSend: function(x) {
     if(x && x.overrideMimeType) {
      x.overrideMimeType("application/j-son;charset=UTF-8");
      }
    },
    dataType: 'json',
    success: function(data) {
        if(data != null) {
            console.log(data);
        } else {
            alert('IE fails here!');
        }
    }
});

Uw server moet gegevens verzenden als inhoudstype "*/json" - Als deze code niet werkt, past u uw antwoordkoppen dienovereenkomstig aan. Het verzenden van "application/json" zou goed zijn, bijvoorbeeld.

Ik hoop dat dit helpt. Proost.

0
toegevoegd
werkte niet :( ik gebruik dit aan de kant van de server (php) header ('Content-type: application/json'); echo json_encode ($ array);
toegevoegd de auteur andufo, de bron
pls lees update 3
toegevoegd de auteur andufo, de bron