2013-12-20 6 views
3

Im создает приложение с Phonegap и Backbone, которое анализирует внешний XML-канал. Фид на:Phonegap ajax GET возвращает внутреннюю ошибку сервера

http://cbccork.schoolspace.ie/index.php?option=com_ninjarsssyndicator&feed_id=1&format=raw 

Принести с:

var news = new model.NewsCollection(); 

news.fetch({ 
    full_url: true, 
    success: function (collection) { 
     slider.slidePage(new NewsList({collection: collection}).$el); 
    }, 
    error: function (model, response, options) { 
     console.log('statusText is '); 
     console.log(response.statusText); 
     console.log('responseText is '); 
     console.log(response.responseText); 
    }, 
}); 

Это прекрасно работает. Однако, поддомен будет удален в ближайшее время, так что подача URL будет:

http://cbccork.ie/index.php?option=com_ninjarsssyndicator&feed_id=1&format=raw 

Если вы идете в URLs вы увидите результат тот же XML (с http://cbccork.ie/ вместо http://cbccork.schoolspace.ie/).

Однако при тестировании на устройстве Android ничего не возвращается. Я распечатал ответ, который является:

Value of responseText is 
Value of responseXML is null 
Value of status is 500 
Value of statusText is Internal Server Error 

Я испытал это в хроме (отключив ту же политику происхождения), и она работает. Но на любом устройстве Android это не сработает.

Я пытался решить это в течение 3 дней, и я полностью в тупике. Есть идеи?

EDIT

Новости модели и коллекции выглядит следующим образом:

define(function (require) { 

"use strict"; 

var $     = require('jquery'), 
    Backbone   = require('backbone'), 
    id=1, 
    xml, 
    parsed = [], 
    title = "", 
    description = "", 
    pubDate = "", 
    src="", 
    img="", 

    News = Backbone.Model.extend({ 

    }), 


    NewsCollection = Backbone.Collection.extend({ 

     model: News, 
     //url: 'http://www.test.webintelligence.ie/test/', 

     url: 'http://www.cbccork.ie/index.php?option=com_ninjarsssyndicator&feed_id=1&format=raw', 

     //This is used so I can test on a browser. On a device, use the direct link 
     /* 
     url: function(){ 
      console.log('in news'); 
       return "/school-proxy.php?type=news"; 
      },*/ 


     parse: function (data) { 

      xml = data; 


      $(xml).find('item').each(function (index) { 


       img = $(description).find('img:first'); 

       src = img.attr('src'); 

       if(typeof(src)==='undefined' || src===null || src===""){ 
        //so its null or undefined 
        src = "img/crest.jpg"; 
       } 

       title = $(this).find('title').text(); 

       description = $(this).find('description').text(); 

       pubDate = $(this).find('pubDate').text(); 

       pubDate = pubDate.substring(0, pubDate.length-12); 


       parsed.push({id:id, title: title, 
          description:description, pubDate:pubDate, src:src}); 
       title, description, pubDate, src, img = ""; 

       id++; 
      }); 

      return parsed; 
     }, 


     fetch: function (options) { 

      options = options || {}; 
      options.dataType = "xml"; 
      return Backbone.Collection.prototype.fetch.call(this, options); 
     } 

    }); 


return { 
    News: News, 
    NewsCollection: NewsCollection 
}; 

}); 

EDIT:

Я попробовал прямой вызов Ajax, но еще раз я получаю внутренний сервер Ошибка на устройстве Android:

 $.ajax({ 
      url: "http://www.cbccork.ie/index.php?option=com_ninjarsssyndicator&feed_id=1&format=raw", 
      }) 
      .done(function(data) { 

       console.log("Sample of data:", data); 

      }) 
      .fail(function(jqXHR, textStatus, errorThrown) { 

       console.log('in the fail, textstatus is '); 
       console.log(textStatus); 
       console.log('error throwen is '); 
       console.log(errorThrown); 

      }); 

Есть ли способ решить это? Я пробовал все ...

+0

Просто мысль. Вы правильно указали свой URL в домене WhiteListing? – GemK

+0

Да, в config.xml У меня есть . Я также пробовал другие url, которые все работают нормально ... – user1716672

+0

как вы объявляете и настраиваете «новости» перед вызовом метода выборки, можете ли вы пройти еще какой-нибудь код? – homtg

ответ

0

Плагин Joomla Mobile включен, но не настроен правильно, так что xml не был возвращен при запросе с мобильного устройства.

1

Вы пытались получить xml через ajax GET и конвертировать в JSON для hadle?

Возможно, это поможет найти ошибку.

+0

$ .ajax ({ URL: "http://www.cbccork.ie/index.php?option=com_ninjarsssyndicator&feed_id=3&format=raw", }) .done (функция (данные) { console.log ("образец данных:", данные); }) .fail (функция (jqXHR, textStatus, errorThrown) { console.log ('ошибка throwen это'); console.log (errorThrown); }); – user1716672

+0

Я думаю, это может быть проблема с конфигурацией сервера. – JSG33kC0d3

+0

Возможно, это так, как я заметил, что сайт не работает должным образом на мобильных устройствах – user1716672

2

просто попытался это с моего компьютера, и это результат:

XMLHttpRequest cannot load http://www.cbccork.ie/index.php?option=com_ninjarsssyndicator&feed_id=1&format=raw. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.2.121' is therefore not allowed access. 

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

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