2010-01-10 5 views
3

Я использую jquery, и я делаю ajax-вызов веб-сервиса, который возвращает некоторые данные json. Это отлично работает в firefox, но по какой-то причине не в IE.Ajax вызов из jquery работает в firefox, но не в IE8

$.ajax({ 
    type: "GET", 
    url: "http://domain.com/Service.svc/data", 
    dataType: "json", 
    success: function(data) { 
     //In firefox this shows the right value of test but in IE8 just "0", why? 
     alert(data.d.test); 
    } 
}); 

Я знаю, что содержание ответа (данные):

{"d":{"__type":"MyContent:#","test":888.75,"test2":592.5}} 

Так что предупреждение показывает 888.75 в светлячок, но 0 в Internet Explorer. Я не понимаю, почему это происходит?

+0

Запустите Fiddler и убедитесь, что IE получает правильный ответ. – SLaks

+0

Кстати, вы пропустили цитату в URL-адресе. – SLaks

+0

Будет ли каждый вызов jquery ajax с моего сайта появляться в скрипаче? – Martin

ответ

0

Попробуйте это и посмотреть, что происходит:

jQuery.get("http://domain.com/Service.svc/data", 
    function(data) { 
     alert(data.d.test); 
    },"json"); 

Не уверен, если это поможет, хотя ...

-1

Попробуйте запустить тот же сценарий без dataType, вы должны получить сырье строку JSON в качестве data. Остановите это, и вы увидите, переданы ли данные в правильной форме.

0

Try включая следующие параметры на вашем .ajax() вызов:

data: "{}", 
contentType: "application/json; charset=utf-8", 

Там есть несколько ASP.Net и IE "ошибка", когда потребляющие веб-сервисы с JQuery. Read here для получения дополнительной информации.

3

Дело в том, что у IE был кеш: true в качестве стандарта или, по крайней мере, я думаю, что он имеет в качестве кеша настройки: false сделал правильное отображение данных. В IE он всегда показывал старые данные.

$.ajax({ 
    type: "GET", 
    url: "http://domain.com/Service.svc/data", cache: false, 
    dataType: "json", 
    success: function(data) { 
     alert(data.d.test); 
    } 
}); 
+0

Значение по умолчанию для кеша: в вызове $ .ajax() всегда истинно, если для параметра dataType установлено значение «jsonp» или «script». Просто Firefox все равно будет извлекать свежие данные, а IE не будет. –

+0

okey, я использую dataType: "json", в чем разница между json и jsonp? – Martin

+0

JSONP - это «JSON с дополнением» - он позволяет выполнять функцию обратного вызова. См. Http://en.wikipedia.org/wiki/JSON#JSONP –

0

Вы можете сделать это следующим образом:

$.ajax({ 
type: "GET", 
url: "http://domain.com/Service.svc/data", 
dataType: "json", 
success: function(jsondata) { 
    data=eval("("+jsondata+")"); 
    alert(data.d.test); 
    } 
}); 

или если вы не хотите использовать Eval затем дать заголовок контента типа «текст/JavaScript», или вы можете сделать некоторые вещи, как CONTENTTYPE : "application/json; charset = utf-8", как указано выше Lance McNearney

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