2013-07-10 9 views
8

Привет, я внедрил один запрос Ajax POST для вызова веб-сервиса. Он всегда возвращает 200 OK, но выполняет неудачное событие. Я пробовал много вещей, но я не понимаю, где я ошибаюсь. Я добавляю свой код здесь. Fiddler показывает контент ответа, но Ajax не выполняет событие успеха.JQuery AJAX POST call return 200 status OK, но ошибка

<!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: 'текст' .... ответ от сервера в соответствующем формате JSON

запрос 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" 
} 

Ответ JSON данные:

{ 
    "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 
      } 
     ] 
} 

Ошибка Ajax: {"readyState": 0, "responseText": "", "status": 0, "statusText": "error"}

Я добавляю скриншоты, которые взяты из поджигатель пожалуйста, перейдите на tinygrab URL, чтобы увидеть скриншот:

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

Не могли бы вы опубликовать результат JSON? Иногда проблема заключается в том, что различные типы кавычек различаются. –

+0

Возможно, потребуется больше контекста или ответы будут только предположениями? Interessing Information (для меня): результат Json, объект ошибки/сообщение, результат, когда вы устанавливаете 'dataType'' для текста, это может помочь. –

+0

Я проверил данные, buit я просто могу вывести, что эта проблема может возникнуть из-за политики crossdomain службы. Это единственный вопрос, который я могу сделать из этих данных. вы попробовали загрузить clientaccesspolicy.xml, чтобы узнать, что он говорит? Это длинный выстрел, так как вы сказали, что видите результат в скрипаче, но вы никогда не знаете. Надеюсь, этот указатель может помочь. –

ответ

4

Не видя ответ JSON я должен был бы догадаться, что проблема в том, что вы используете Неправильные (или нет) котировки для JSON. Вы должны использовать double Цитаты (для имен свойств и строковых значений) или, по крайней мере, когда у меня была эта проблема, двойные кавычки решили ее.

Пример:

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

я надеюсь, что это помогает.

+0

Спасибо, но я использовал двойные кавычки для JSON. –

+0

Не могли бы вы опубликовать результат JSON в своем Вопросе? Поскольку он работает, когда вы используете dataType: text, и он не используется, когда вы используете dataType: json, поэтому он имеет отношение к ответу. –

+0

Я использовал dataType: текст, но он тоже не работает –

2

Для других друзей, у которых есть такая ошибка, попробуйте вернуть значение JSON на страницу, на которую вы отправляете свои значения.

В моем случае я нахожусь на странице localhost:8080/sender, которая отправляет данные JSON на страницу localhost:8110/receiver. После того, как страница получателя получит данные, верните что-то вроде {} обратно на страницу отправителя. В противном случае обратный вызов ошибки вызывается, даже если сервер возвращает 200 HTTP-код.

Смежные вопросы