Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Servlet and JSON


Автор: Christoph 14.10.2011, 18:25
есть такой сервлет который возращает json

Код

public class GadgetOssEventServlet extends HttpServlet {

    @EJB(name = "OssEventStoreBean")
    private OssEventStoreLocal alarmStoreBean;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        JSONArray alarmEventFacilitytListOfJsonArray = null;
        List<AlarmEventFacility> allAlarms = alarmStoreBean.getAllAlarms();
        try {
            alarmEventFacilitytListOfJsonArray = alarmEventFacilitytListToJsonArray(allAlarms);
        } catch (JSONException ex) {
            Logger.getLogger(GadgetOssEventServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
        response.setContentType("application/json");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Cache-Control", "no-cache");
        response.getWriter().print(alarmEventFacilitytListOfJsonArray);    
        response.getWriter().flush();
        
    }
    
    private JSONArray alarmEventFacilitytListToJsonArray(List<AlarmEventFacility> list) throws JSONException {
        JSONArray array = new JSONArray();
        for (AlarmEventFacility alarmEventFacility : list) {            
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("eventType", alarmEventFacility.getEventType());
            jsonObject.put("firedAt", new Date(alarmEventFacility.getFiredAt()));
            jsonObject.put("source", alarmEventFacility.getSource());
            jsonObject.put("pinName", alarmEventFacility.getPinName());            
            
            array.put(jsonObject);
        }
        return array;
    }
}


на клиенте крутится js который разбирает json по урлу, вот сам скрипт

Код

function getRequest()
{
    var url = "http://192.168.2.221:8080/OssEventManager-web/gadgetOss.json";
    $.getJSON(url, 
        function(data) {            
            var items = [];

            $.each(data, function(key, val) {
                if (val.eventType == "Alarm")
                    items.push('<li>' + '<font size="2" color="red">' + val.eventType + ' ' + val.firedAt + ' '+ val.source + ' ' + val.pinName + '</font>' + '</li>');   
                else
                    items.push('<li>' + '<font size="2" color="#000080">' + val.eventType + ' ' + val.firedAt + ' '+ val.source + ' ' + val.pinName + '</font>' + '</li>'); 
                    
            });

            $('<div/>', {
                'class': 'my-new-list',
                html: items.join('')
            }).appendTo('body');
        }
        ).error(
        function() {
            console.log("ajax error");
        }
        );
}


и если в урл указать, на локальный файл json то все выводит ок, а если на удаленный сервер, в консоль выводит ошибку
если в  браузер вбить урл, то он предлагает сохранить файл, не могу понять в чем проблема

Автор: Ares4322 15.10.2011, 19:36
Можно попробовать ContentType на сервере поменять с  application/json на text/html. На сколько я знаю, семейство application указывает на то, что контент должен открываться сторонней программой.

Автор: Christoph 17.10.2011, 11:48
ничего не получилось

Автор: Ares4322 17.10.2011, 12:47
А может проблема именно в суффиксе .json в url?
Пробовали без него?

Автор: Christoph 17.10.2011, 14:53
да без него тоже самое :(

Автор: Ares4322 18.10.2011, 16:29
А ошибку какую выводит при обращении по Ip, а не как к localhost ?

Автор: Atum 6.4.2012, 09:59
Цитата(Christoph @ 14.10.2011,  18:25)
и если в урл указать, на локальный файл json то все выводит ок, а если на удаленный сервер, в консоль выводит ошибку
если в  браузер вбить урл, то он предлагает сохранить файл, не могу понять в чем проблема

возможная проблема в том что вы пытаетесь с клиента сделать кросс доменный вызов - такого  делать нельзя ( есть ограничение на такие вызовы)

Исключение сделано только для json объектов , но для этого надо указывать : тип jsonp

Так же важно указать !   dataType: 'jsonp' и  ?callback=?',

 пример : 
Код

            var twname = 'ru_lh';
            $.ajax({
                url: 'https://api.twitter.com/1/statuses/user_timeline/'+twname+'.json?callback=?',
                data :{'include_entities':true ,'include_rts':true},
                dataType: 'jsonp',
                success: function(data){
                    try{
                        console.log(data);
                        var el = document.getElementById('twitter');
                        var divtext =new String();
                        for(var i =0;i<data.length; i++){
                            var text =   data[i].text;
                            var username =data[i].user.name; 
                            var screen_name = '@'+data[i].user.screen_name; 
                            var fromid = '<b>'+username+'</b> '+screen_name;   
                            divtext=divtext+ fromid +'<br/>'+text+'<br/><br/>';
                        }
                        el.innerHTML = el.innerHTML+divtext;
                    }catch(e){
                        console.log(e.name);
                    }
                            
                }
            }); 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)