2013-07-10 15 views
8

Ciao Ho implementato una richiesta POST Ajax per chiamare il servizio web. Restituisce sempre 200 OK ma esegue un evento fallito Ho provato molte cose ma non riesco a capire dove sto sbagliando. Sto aggiungendo il mio codice qui. Fiddler mostra il contenuto della risposta ma Ajax non sta eseguendo l'evento di successo.Jquery AJAX POST chiamata restituita 200 stato OK ma errore

<!DOCTYPE html> 
<html><head> 
<script src="http://code.jquery.com/jquery-1.7.1.min.js" type="text/javascript"></script> 
</head> 
<body> 
<script type="text/javascript"> 

$.ajax({ 
    type: "POST", 
    url: url, 
    data: values, 
    dataType: 'json', 
    cache: false, 
    success: function (result) { 
     alert("success:"+result); 
    }, 
    error:function (error) { 
     alert("error"+error); 
    } 
}); 
</script> 
</body> 
</html> 

dataType ho provato: 'testo' .... risposta dal server sia in perfette formato JSON

Richiesta dati JSON:

{ 
    "search": { 
     "params_attributes": { 
      "adults": "1", 
      "children": "0", 
      "depart_date": "2013-07-10", 
      "destination_name": "OMS", 
      "direct": "0", 
      "infants": "0", 
      "origin_name": "KUL", 
      "range": "0", 
      "trip_class": "0" 
     } 
    }, 
    "signature": "XXXXXXXX", 
    "marker": "XXX" 
} 

risposta JSON dati:

{ 
    "search_id":"66", 
    "metadata" : {}, 
    "tickets" : [ 
     { 
      "native_prices":{"7":"5500.0", "6":"5680.0", "3":"5657.0"}, 
      "order_urls":{"7":"1","6":"557","3":"906"}, 
      "direct_flights":[ 
       { 
        "number":"1837", 
        "airline":"FV", 
        "departure":"1294037100", 
        "arrival":"1294041900", 
        "duration":"80", 
        "delay":"0", 
        "origin":"DME", 
        "destination":"LED", 
        "aircraft":"Airbus A319" 
       } 
      ], 
      "return_flights":[ 
       { 
        "number":"1858", 
        "airline":"FV", 
        "departure":"1295503800", 
        "arrival":"1295508600", 
        "duration":"80", 
        "delay":"0", 
        "origin":"LED", 
        "destination":"DME", 
        "aircraft":"Airbus A320" 
       } 
      ] 
     } 
    ], 
     "airlines": { 
      "AB": { 
      "alliance_name": null, 
      "average_rate": 3.84, 
      "deeplink_id": 18, 
      "homepage_id": "4ec0ff7b9f1c2760af0049d7", 
      "id": 35, 
      "name": "airberlin", 
      "rates": 377 
      }, 
      "AF": { 
      "alliance_name": "SkyTeam", 
      "average_rate": 2.89, 
      "id": 48, 
      "name": "Air France", 
      "rates": 292 
      } 
     }, 
    "airports":{ 
      "ALA": { 
      "average_rate": 3.66, 
      "city": "\u0410\u043b\u043c\u0430\u0442\u044b", 
      "country": "\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d", 
      "name": "\u0410\u043b\u043c\u0430\u0442\u044b", 
      "rates": 60, 
      "time_zone": "Asia/Almaty" 
      }, 
      "AMM": { 
      "average_rate": 3.42, 
      "city": "\u0410\u043c\u043c\u0430\u043d", 
      "country": "\u0418\u043e\u0440\u0434\u0430\u043d\u0438\u044f", 
      "name": "Queen Alia International", 
      "rates": 5, 
      "time_zone": "Asia/Amman" 
      } 
    }, 
    "currency_rates":{"eur":"41.3564", "uah":"3.72911"}, 
     "gates_info": [ 
      { 
      "average_rate": 4.34, 
      "currency_code": "rub", 
      "id": 1, 
      "is_airline": false, 
      "label": "Nabortu", 
      "mobile_version": false, 
      "payment_methods": [ 
       "bank", 
       "yandex_money", 
       "web_money", 
       "terminal", 
       "card", 
       "svyaznoy", 
       "euroset" 
      ], 
      "rates": 336 
      }, 
      { 
      "average_rate": 4.34, 
      "currency_code": "rub", 
      "id": 2, 
      "is_airline": false, 
      "label": "Davs", 
      "mobile_version": false, 
      "payment_methods": [ 
       "cash", 
       "bank", 
       "yandex_money", 
       "web_money", 
       "terminal", 
       "card", 
       "exp", 
       "euroset" 
      ], 
      "rates": 416 
      } 
     ] 
} 

Errore Ajax: {"readyState": 0, "responseText": "", "stato": 0, "statusText": "errore"}

sto aggiungendo le immagini, che è tratto da Firebug vai al tinygrab url per visualizzare Screenshot:

Headers - grab.by/on5Q 
Post - grab.by/on5U 
Response - grab.by/on5W 
Coockies - grab.by/on5Y 
+0

Potrebbe pubblicare il risultato JSON? A volte il problema si trova sul formato na dei vari tipi di virgolette. –

+0

Un po 'più di contesto sarebbe necessario o le risposte saranno solo ipotesi lavoro? Informazioni per l'intercettazione (per me): risultato Json, oggetto/messaggio di errore, risultato quando si imposta 'dataType'to' text' questo potrebbe aiutare. –

+0

Ho controllato i dati, buit posso dedurre, che questo problema potrebbe essere dovuto alla politica di crossdomain del servizio. Questo è l'unico segnale che posso ricavare da questi dati. hai provato a scaricare il clientaccesspolicy.xml per vedere cosa dice? È un po 'difficile da quando hai detto di vedere il risultato in violinista, ma non lo sai mai. Spero che questo puntatore potrebbe aiutare. –

risposta

4

Senza vedere la risposta JSON avrei dovuto intuire, che il problema è che si sta utilizzando il Quotes errati (o no) per il JSON. È necessario utilizzare doppie virgolette (per i nomi di proprietà e valori stringa), o almeno quando ho avuto quel problema, le virgolette doppie risolto.

Esempio:

{"id":1,"name":"TOM"} 

Spero che questo aiuta.

+0

Grazie ma ho usato le doppie virgolette per il JSON. –

+0

Potresti postare il risultato JSON nella tua domanda? Dal momento che sembra funzionare quando usi dataType: text e non funziona quando usi dataType: json, quindi ha a che fare con la risposta. –

+0

Ho usato dataType: text ma non funziona pure –

2

Per gli altri amici che hanno un tale errore, provare a restituire un valore JSON alla pagina da cui si inviano i valori.

Nel mio caso, sono nella pagina localhost:8080/sender che invia i dati JSON alla pagina localhost:8110/receiver. Dopo che la pagina ricevente riceve i dati, restituisce qualcosa come {} alla pagina del mittente. In caso contrario, viene richiamata la chiamata di errore anche se il server restituisce un codice HTTP 200.

Problemi correlati