2013-08-13 4 views
0

В данном коде я использовал одну метку и одну кнопку. Я хочу, чтобы, когда я нажимаю кнопку, должен быть отправлен запрос, который получит Json из данной ссылки и напечатает на ярлыке. но для этого кода я просто печатаю «ОК» внутри метки при успешном завершенииXMLHttpRequest не работает в QML Blackberry 10

Проблема, с которой я столкнулся, - это то, что я не вхожу в утверждение if. на самом деле нажатие кнопки Button ничего не происходит. Я знаю, что есть менеджер сети в QT, который я могу использовать, но в моей ситуации я хочу разобрать внутри QML

// Default empty project template 
import bb.cascades 1.0 

// creates one page with a label 

Page { 
    Container { 
     layout: StackLayout {} 
     Label { 
      id: msgLabel 
      text: qsTr("Hello World") 
      textStyle.base: SystemDefaults.TextStyles.BigText 
      verticalAlignment: VerticalAlignment.Center 
      horizontalAlignment: HorizontalAlignment.Center 
     } 
     Button { 
      id: requestXML 
      objectName: "requestXML" 
      onClicked: { 
       var doc = new XMLHttpRequest(); 
       doc.onreadystatechange = function() { 
        if (doc.readyState == 4) { 
         msgLabel.text="OK" 
         // pass “doc.responseText” to C++ for Parsing 
        } 
       } 
       doc.open("GET", "http://www.example.com/sample.json", true); 
       doc.send(); 

      } 
    } 
    } 
} 

В моем файле .pro я объявил

CONFIG += qt warn_on cascades10 
QT += network 
CONFIG += debug 
CONFIG += console 
LIBS += -lbbdata 
QT +=script 
QT +=scripttools 

Где я ошибаюсь? или я должен объявить что-то еще

+0

активов: ///main.qml: 29: SyntaxErro r: ошибка анализа; то есть doc.open (...) –

+0

Вы используете старый API twitter! '{" errors ": [{" message ":" API REST Twitter для v1 больше не активен. Перейдите на API v1.1. https://dev.twitter.com/docs/api/1.1/overview. " , "code": 68}]} ' –

+0

@BojanKogoj здесь проблема не в Twitter API. основная проблема заключается в том, что я не получаю никакого ответа от какой-либо ссылки JSON. –

ответ

0

I don't have access to Twitter API, поэтому я не могу проверить его должным образом. Но это работает для других файлов JSON. Для этого примера вам нужен только LIBS + = -lbbdata в вашем .pro-файле. Также читайте DataSource и JsonDataAccess. Если бы я был вами, я бы загрузил JSON через C++. не

import bb.cascades 1.0 
import bb.data 1.0 

Page { 
    Container { 
     layout: StackLayout { 
     } 
     Label { 
      id: msgLabel 
      text: qsTr("Hello World") 
      textStyle.base: SystemDefaults.TextStyles.BigText 
      verticalAlignment: VerticalAlignment.Center 
      horizontalAlignment: HorizontalAlignment.Center 
     } 
     Button { 
      id: requestXML 
      onClicked: { 
       dataSource.load(); 
      } 
     } 
     attachedObjects: [ 
      DataSource { 
       id: dataSource 
       source: "https://api.twitter.com/1.1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=ladygaga" 
       type: DataSourceType.Json 

       onDataLoaded: { 
        console.log("loaded"); 
        console.log(JSON.stringify(data)); //just for testing 
        console.log(data);   
       } 
       onError: { 
        console.log(errorType); 
        console.log(errorMessage); 
       } 
      } 
     ] 
    } 

Также API Twitter вы использовали больше не доступны так проверить REST API v1.1 Resources или вы получите следующее сообщение об ошибке:

{"errors": [{"message": "The Twitter REST API v1 is no longer active. Please migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.", "code": 68}]} 
+0

Отлично работает. но могу ли я спросить, в чем проблема с моим кодом. –

+0

Я не знаю, может быть, это не поддерживается. –

0

Я думаю, что проблема в запросе междоменным который ISN По умолчанию не разрешено. В WebWorks вам нужно объявить элемент <access> в вашем приложении config.xml файл для домена (ов), к которому вы хотите получить доступ.

К сожалению, я не знаю, как сделать то же самое в проекте QML. Существующие элементы в bar-descriptor.xml не позволяют делать подобные вещи.

ДОБАВЛЕНО:

Я написал простой HTTP-заглушки для тестирования, что угадывание и выглядит это действительно то, что вызывает проблемы:

$ echo -e 'HTTP/1.1 200 OK\n\n' | nc -l 8080 


GET /user_timeline.json?include_entities=true&include_rts=true&screen_name=ladygaga HTTP/1.1 
CONTENT-TYPE: application/x-www-form-urlencoded 
Connection: Keep-Alive 
Accept-Encoding: gzip 
Accept-Language: en-GB,* 
User-Agent: Mozilla/5.0 
Host: 192.168.1.106:8080 

я XMLHttpRequest.status == 200 в этом случае в то время как на доступ Twitter конечных точек I получить XMLHttpRequest.status == 0 за тот же код:

import bb.cascades 1.0 

Page { 
    Container { 
     layout: StackLayout { 
     } 
     Label { 
      id: msgLabel 
      text: qsTr("Hello World") 
      textStyle.base: SystemDefaults.TextStyles.BigText 
      verticalAlignment: VerticalAlignment.Center 
      horizontalAlignment: HorizontalAlignment.Center 
     } 
     Button { 
      id: requestXML 
      objectName: "requestXML" 
      onClicked: { 
       sendRequest(); 
      } 
     } 
    } 

    function sendRequest() { 
     var ajax = new XMLHttpRequest(); 
     ajax.onreadystatechange = function() { 
      if (ajax.readyState === XMLHttpRequest.DONE) { 
       console.log("ajax.status: " + ajax.status); 
       if (ajax.status === 200) { 
        console.log("Response = " + ajax.responseText); 
       } else { 
        // This is very handy for finding out why your web service won't talk to you 
        console.log("Status: " + ajax.status + ", Status Text: " + ajax.statusText); 
       } 
      } 
     } 
//  var url = "http://192.168.1.106:8080/user_timeline.json?include_entities=true&include_rts=true&screen_name=ladygaga"; 
     var url = "https://api.twitter.com/1.1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=ladygaga"; 
     ajax.open("GET", url, true); // only async supported 
     ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') 
     ajax.send(); 
    } 
} 
Смежные вопросы