2013-09-16 5 views
0

У меня возникли проблемы с переносом приложения для телефонных звонков с Android и iOS на WP8. Кажется, это сбой, когда я пытаюсь загрузить некоторые .JSON-файлы. Версии, которые я использую, это phonegap 2.9.0 и jQuery 2.0.3. Все работает как на Android, так и на iOS. ВыходPhonegap и Windows Phone 7: IndexOutOfBoundsException

консоли:

'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Runtime.Serialization.ni.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
Updating IsolatedStorage for APP:DeviceID :: ********-****-****-****-*********** 
CordovaBrowser_Navigated :: www/index.html 
CommandString : Device/getDeviceInfo/Device899915039/[] 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded   'C:\windows\system32\System.ServiceModel.Web.ni.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\en-US\mscorlib.debug.resources.dll'. Module was built without symbols. 
CommandString : NetworkStatus/getConnectionInfo/NetworkStatus899915040/[] 
An exception of type 'System.NotSupportedException' occurred in Microsoft.Phone.ni.dll and wasn't handled before a managed/native boundary 
The thread 0x1160 has exited with code 259 (0x103). 
The thread 0x80c has exited with code 259 (0x103). 
CommandString : DebugConsole/log/DebugConsole899915041/"Received Event: deviceready" 
Log:["Received Event: deviceready","DebugConsole899915041"] 
The thread 0x8c8 has exited with code 259 (0x103). 
CommandString : File/readResourceAsText/File899915042/["localization/nb-NO.json"] 
A first chance exception of type 'System.IndexOutOfRangeException' occurred in no.visma.patentstyret.DLL 
An exception of type 'System.IndexOutOfRangeException' occurred in no.visma.patentstyret.DLL but was not handled in user code 

Это Аякса загрузка языковых файлов:

var _loadDataSet = function(callback) { 
     $.ajax({url: "localization/" + _language + ".json", async: false, dataType: 'json', success: function(data) { 
      _dataSet = data; 
      if(callback) { 
       callback(); 
      } 
     }}).error(function(e) { 
      console.error("Error in language files."); 
      console.error(e); 
     }); 
    }; 

Я понятия не имею, с чего начать, любая помощь будет высоко ценится!

+0

Обновлено мой ответ – Cheese

+0

Обновленный мой ответ снова – Cheese

ответ

1

Показать, пожалуйста, ваше чтение из файла.

я делал заявление с усами шаблонизатора, и сделал это:

$.Mustache.load("./templates/about/about-app.tpl") 

Это не сработало, потому что КР8 requres полного пути:

$.Mustache.load("www/templates/about/about-app.tpl") 

Кстати, WP7 - Безразлично» т нагрузки с полным путем, только с относительными =)))

И еще одно:

$.ajax({url: "www/localization/" + _language + ".json", async: false, dataType: 'json', success: function(data) { 

WP проекты не любят такие расширения как JSON и другие (иногда это делали работу, иногда не делали не знаю, почему), поэтому я предлагаю вам сделать:

1) Изменить тип файла на *. TXT

2) Запрос:

$.ajax({url: "www/localization/" + _language + ".txt", async: false, dataType: 'text', success: function(data) { 

UPDATE:

Почти забыл, для использования AJAX вы должны это сделать:

document.addEventListener('deviceready', function() { 
    jQuery.support.cors = true; 
    $.mobile.allowCrossDomainPages = true; 
}, false); 
+0

Попробовал переименовать файл .txt, unfortunally никаких изменений. Также проверяется с более ранней версией jquery без успеха. – Nexcius

+0

Этот ответ работает, если вы используете Mustache. – Nexcius

0

Решение заключается в использовании XMLHttpRequest. Протестировано и работает на Android, iPhone и Windows Phone 8. Хотя решение для загрузки файлов локального языка заключалось в том, чтобы добавить данные в класс JavaScript, все еще были проблемы с перекрестными запросами домена с помощью PhoneGap на WP8.

Чтобы получить запросы на междоменные запросы на WP8, я использовал XMLHttpRequests (также можно использовать JSONP, но это также поддерживает другие форматы). Это класс-оболочка, что я в конечном итоге с помощью:

(function() { 
    name.of.package.HTTPRequest = function(destination, success, error, contentType) { 
     var STATUS_IDLE = 0; 
     var STATUS_OPEN = 1; 
     var STATUS_LOADED = 2; 
     var STATUS_WORKING = 3; 
     var STATUS_DONE = 4; 

     var req = new XMLHttpRequest(); 
     req.open('GET', destination, true); 

     if(contentType) { 
      req.setRequestHeader("Content-Type", contentType); 
     } 
     else { 
      req.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 
     } 

     req.onreadystatechange = function(aEvt) { 
      if(req.readyState == STATUS_DONE) { 
       if(req.status == 200) { 
        if(success) { 
         success(req.responseText); 
        } 
       } 
       else { 
        if(error) { 
         error("Response returned with error code: " + req.status); 
        } 
       } 
      } 
     }; 

     req.send(null); 
    }; 
})();