2012-01-09 40 views
6

Gần đây tôi đang làm việc trên điện thoại di động Nokia bằng Qt-Qml. Tôi phải thực hiện yêu cầu POST đối với Url HTTPS đã cho. Tôi đang sử dụng QML và tôi đang cố gắng làm điều đó trong Javascript mà không có bất kỳ may mắn nào.Https POST/GET với Qml/Qt

Có ai có ý tưởng về nó không? Có thể làm điều đó bằng cách sử dụng Javascript trong QML? Bất kỳ lời khuyên nào về cách thực hiện nó trong QT?

tôi đã cố gắng gọi một chức năng như thế này:

var http = new XMLHttpRequest() 
var url = "myform.xsl_submit"; 
var params = "num=22&num2=333"; 
http.open("POST", url, true); 

//Send the proper header information along with the request 
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
http.setRequestHeader("Content-length", params.length); 
http.setRequestHeader("Connection", "close"); 

http.onreadystatechange = function() {//Call a function when the state changes. 
    if(http.readyState == 4 && http.status == 200) { 
     print("ok"); 
    }else{ 
       print("cannot connect"); 
     } 
} 
http.send(params); 
+1

'XMLHttpRequest.DONE' là dễ nhớ hơn '4' , Tôi đoán ... –

Trả lời

4

tuyên bố if của bạn là sai: Các hàm được gọi nhiều lần, nhưng chỉ có một thời gian http.readyState = 4. Vì vậy, bạn in thông báo lỗi mặc dù không có lỗi nào được nêu ra.

Trước tiên, bạn nên kiểm tra xem http.readyState = 4 và sau đó xem mã trạng thái.

Dưới đây là một ví dụ làm việc tối thiểu:

import QtQuick 1.1 

Rectangle { 
    Component.onCompleted: { 
     var http = new XMLHttpRequest() 
     var url = "http://localhost:8080"; 
     var params = "num=22&num2=333"; 
     http.open("POST", url, true); 

     // Send the proper header information along with the request 
     http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     http.setRequestHeader("Content-length", params.length); 
     http.setRequestHeader("Connection", "close"); 

     http.onreadystatechange = function() { // Call a function when the state changes. 
        if (http.readyState == 4) { 
         if (http.status == 200) { 
          console.log("ok") 
         } else { 
          console.log("error: " + http.status) 
         } 
        } 
       } 
     http.send(params); 
    } 
} 

Tôi tạo ra một pseudo-webserver địa phương với netcat để kiểm tra nó:

% echo -e 'HTTP/1.1 200 OK\n\n' | nc -l 8080 
POST/HTTP/1.1 
Content-Type: application/x-www-form-urlencoded;charset=UTF-8 
Content-Length: 15 
Connection: Keep-Alive 
Accept-Encoding: gzip 
Accept-Language: de-DE,en,* 
User-Agent: Mozilla/5.0 
Host: localhost:8080 

num=22&num2=333 
+0

vâng, thực sự tôi đặt "var url =" https: // ..... ";" itjust một ví dụ ở đó .. – fran

+0

@fran Oh, ok :) Nhưng tôi đã tìm thấy thứ gì đó khác nhau, điều đó cũng có thể gây ra thông báo lỗi ... – hiddenbit

+0

Vâng, bạn đã đúng! cảm ơn bạn anyway..im vẫn đấu tranh làm yêu cầu .. nhưng không có cách nào – fran