基于qml对js的支持,我们可以直接在qml里调用Ajax进行网络通信,.在誊写本文之前,关于在qml里进行Ajax通信的博文很少(貌似只有一篇,而且只有get实例,本文的ajax.js就是来自那篇博文),所以我决定自己记录一下.

so,我们需要自己准备一个ajax.js:

// GET
function get(url, success, failure)
{
    var xhr = new XMLHttpRequest;
    xhr.open("GET", url);
    xhr.onreadystatechange = function() {
        handleResponse(xhr, success, failure);
    }
    xhr.send();
}

// POST
function post(url, arg, success, failure)
{
    var xhr = new XMLHttpRequest;
    xhr.open("POST", url);
    xhr.setRequestHeader("Content-Length", arg.length);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");  //用POST的时候一定要有这句
    xhr.onreadystatechange = function() {
        handleResponse(xhr, success, failure);
    }
    xhr.send(arg);
}



// 处理返回值
function handleResponse(xhr, success, failure){
    if (xhr.readyState == XMLHttpRequest.DONE) {
        if (xhr.status ==  200){
            if (success != null && success != undefined)
            {
                var result = xhr.responseText;
                try{
                    success(result, JSON.parse(result));
                }catch(e){
                    success(result, {});
                }
            }
        }
        else{
            if (failure != null && failure != undefined)
                failure(xhr.responseText, xhr.status);
        }
    }
}

直接在你的工程目录里新建一个ajax.js,然后把上面的代码拷贝上就好了.

然后在Qt Creator里右键qml.qrc文件,添加现有文件,然后把刚刚的ajax.js添加进去

然后在你需要的ajax的qml文件里用import "ajax.js" as Ajax引入ajax文件

然后就能使用ajax了.

栗子如下:

import QtQuick 2.10
import QtQuick.Controls 2.3

ApplicationWindow {
    id: window
    visible: true
    width: 640
    height: 480
    title: qsTr("Stack")

    // ... ...

    function testGet(){
        Ajax.get("http://这里填网址.com?带好参数哦",
                    function(result, json){         //成功后的回调函数
                        console.log(result)     //结果
                        console.log(json)       //结果的Json
                    },function (){              //失败后的回调函数
                        console.log("error")
                    }

        );
    }

    function testPost(){
        Ajax.post("http://这里填api网址","参数名 = 参数内容",
                  function(result, json){         //成功后的回调函数
                        console.log(result)     //结果
                        console.log(json)       //结果的Json
                  },function (){              //失败后的回调函数
                        console.log("error")
                    }
        )
    }


}

嗯,基本上用法就这样,根据自己的需要修改参数,回调函数,灵活运用就好啦~

Last modification:February 15th, 2020 at 09:11 pm
如果觉得我的文章对你有用,请随意赞赏