Хобрук: Ваш путь к мастерству в программировании

Titanium XHR - ошибка синтаксического анализа XML во время XHR.SEND, при этом не используется синтаксический анализатор XML сознательно

Я пытаюсь отправить фотографию из мобильного приложения Titanium Appcelerator на веб-сервер.

Я использую следующий пример:

var upload_token = "hi! I am a token!";

var content = '';
var boundary = '---------------------------170062046428149';

content += '--'+ boundary + '\r\n';
content += 'Content-Disposition: form-data; name="uploadToken"\r\n';
content += '\r\n';
content += upload_token + '\r\n';
content += '--'+ boundary + '\r\n';
content += 'Content-Disposition: form-data; name="myNickname"\r\n';
content += '\r\n';
content += myNickname+'\r\n';
content += '--'+ boundary + '\r\n';

content += 'Content-Disposition: form-data; name="nativePath"\r\n';
content += '\r\n';
content += 'file:///storage/emulated/0/Pictures/app-name/tia-217296905.jpg\r\n';
content += '--'+ boundary + '\r\n';

content += 'Content-Disposition: form-data; name="fileContent"; filename="/appicon.png"\r\n';
content += 'Content-Type: binary/octet-stream\r\n';
content += '\r\n';

var file = Ti.Filesystem.getFile(Ti.Filesystem.resourcesDirectory, '/appicon.png');
var full_content = Ti.createBuffer({value: content});
var fileStream = Ti.Stream.createStream({ source : file.read(), mode : Titanium.Stream.MODE_READ});
var content_size = full_content.append(Ti.Stream.readAll(fileStream));
Ti.API.debug('Appended File Size : ' + content_size ); // ==> same as file.size

content = '\r\n';
content += '--'+ boundary + '--\r\n';
full_content.append(Ti.createBuffer({value : content}));

xhr = Ti.Network.createHTTPClient();
var send_data = full_content.toBlob();

var url = 'http://website.address/api/push_photo.php';
xhr.onload = function(e){
    console.log(e);
    alert("DONE!");
};
xhr.onerror = function(e){
    console.log(e);
};
xhr.open('POST', url);
xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);
xhr.send({image:send_data});

Все работает как положено, файл передается на сервер, и приложение Titanium в моем мобильном телефоне говорит "ГОТОВО!". Это означает, что xhr.onload был запущен...

Мой вопрос касается ошибки, которую я вижу в консоли разработчика:

Из какой строки исходит эта «Ошибка синтаксического анализа XML [ОШИБКА]»? Как это исправить?

Вроде бы все работает нормально, но ошибка выглядит довольно серьезной...

Любые идеи были бы хорошы.

лол это было


Ответы:


1

в

console.log(e);

Без console.log никаких ошибок не появляется и все работает нормально. Вероятно, e был пустым или недопустимым объектом для ведения журнала...

xhr.onload = function(e){
 divider("ONLOAD DONE");
 //console.log(JSON.stringify(e));
 //console.log(e);
 alert("done");
};

[ОШИБКА]: XMLModule: (KrollRuntimeThread) [13440,13649] Ошибка синтаксического анализа XML [ОШИБКА]: XMLModule: org.xml.sax.SAXParseException: Неожиданный токен (позиция: TEXT Array [ОШИБКА]: XMLModule: ( [ОШИБКА]: XMLModule : [upl...@7:1 в java.io.InputStreamReader@42917730) [ОШИБКА] : XMLModule: в org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:146) [ОШИБКА] : XMLModule: в javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:107) [ОШИБКА]: XMLModule: в ti.modules.titanium.xml.XMLModule.parse(XMLModule.java:82) [ОШИБКА]: XMLModule: в ti.modules.titanium.xml.XMLModule.parse(XMLModule.java:68) [ОШИБКА]: XMLModule: в ti.modules.titanium.network.TiHTTPClient.getResponseXML(TiHTTPClient.java:562) [ОШИБКА]: XMLModule: в ti.modules.titanium.network.HTTPClientProxy.getResponseXML(HTTPClientProxy.java:129) [ОШИБКА]: XMLModule: в org.appcelerator.kroll.runtime.v8.V8Object.nativeCallProperty(N ative Method) [ОШИБКА]: XMLModule: в org.appcelerator.kroll.runtime.v8.V8Object.callProperty(V8Object.java:73) [ОШИБКА]: XMLModule: в org.appcelerator.kroll.KrollProxy.handleMessage(KrollProxy.java :1155) [ОШИБКА]: XMLModule: в android.os.Handler.dispatchMessage(Handler.java:95) [ОШИБКА]: XMLModule: в android.os.Looper.loop(Looper.java:137) [ОШИБКА]: XMLModule : at org.appcelerator.kroll.KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:118) [ОШИБКА] : TiHTTPClient: (KrollRuntimeThread) [7,13656] Ошибка разбора XML [ОШИБКА] : TiHTTPClient: org.xml.sax.SAXParseException : Неожиданный токен (позиция: массив TEXT [ОШИБКА] : TiHTTPClient: ( [ОШИБКА] : TiHTTPClient: [upl...@7:1 в java.io.InputStreamReader@42917730) [ОШИБКА] : TiHTTPClient: в org.apache. гармония.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:146) [ОШИБКА]: TiHTTPClient: в javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:107) [ER ROR]: TiHTTPClient: в ti.modules.titanium.xml.XMLModule.parse(XMLModule.java:82) [ОШИБКА]: TiHTTPClient: в ti.modules.titanium.xml.XMLModule.parse(XMLModule.java:68) [ ОШИБКА]: TiHTTPClient: в ti.modules.titanium.network.TiHTTPClient.getResponseXML(TiHTTPClient.java:562) [ОШИБКА]: TiHTTPClient: в ti.modules.titanium.network.HTTPClientProxy.getResponseXML(HTTPClientProxy.java:129) [ ОШИБКА]: TiHTTPClient: на org.appcelerator.kroll.runtime.v8. V8Object.nativeCallProperty (собственный метод) [ОШИБКА]: TiHTTPClient: в org.appcelerator.kroll.runtime.v8.V8Object.callProperty (V8Object.java:73) [ОШИБКА]: TiHTTPClient: в org.appcelerator.kroll.KrollProxy.handleMessage (KrollProxy.java:1155) [ОШИБКА]: TiHTTPClient: в android.os.Handler.dispatchMessage(Handler.java:95) [ОШИБКА]: TiHTTPClient: в android.os.Looper.loop(Looper.java:137) [ ERROR] : TiHTTPClient: at org.appcelerator.kroll.KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:118) [WARN] : TiBlob: (KrollRuntimeThread) [24,13680] getFile не поддерживается для нефайловых типов больших двоичных объектов. [ПРЕДУПРЕЖДЕНИЕ]: TiBlob: (KrollRuntimeThread) [8,13688] getNativePath не поддерживается для нефайловых типов больших двоичных объектов. [INFO] :
{"code":0,"source":{"responseText":"Array\n(\n [uploadToken] => привет! Я токен!\n [myNickname] => raholl \n [nativePath] => file:///storage/emulated/0/Pictures/app-name/tia-217296905.jpg\n)\n","location":"http://***** ***/api/push_photo.php","статус":200,"домен":null,"readyState":4,"tlsVersion":0,"connectionType":"POST","validatesSecureCertificate":false," statusText":"OK","имя пользователя":null,"password":null,"allResponseHeaders":"null:HTTP/1.1 200 OK\nConnection:Keep-Alive\nContent-Length:166\nContent-Type:text/ html\nДата: среда, 18 мая 2016 г., 02:10:12 по Гринвичу\nKeep-Alive:timeout=5, max=100\nServer:Apache/2.2.22 (Debian)\nVary:Accept-Encoding\nX-Android-Received -Millis:1463537845271\nX-Android-Sent-Millis:1463537844807\nX-Powered-By:PHP/5.5.33-1~dotdeb+7.1\n","responseXML":null,"responseData":{"file" :null,"nativePath":null,"height":0,"length":166,"width":0,"mimeType":"text/html","apiName":"Ti.Blob","text" :"Массив\n(\n [uploadToken] => привет! Я токен!\n [m yNickname] => raholl\n
[nativePath] => file:///storage/emulated/0/Pictures/app-name/tia-217296905.jpg\n)\n","type":2, "bubbleParent":true},"autoRedirect":true,"apiName":"Ti.Network.HTTPClient","autoEncodeUrl":true,"connected":false,"bubbleParent":true,"_events":{"disposehandle ":{}}},"success":true} [INFO] : ALERT: (KrollRuntimeThread) [8,13696] выполнено

18.05.2016
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..