العمل على خدمات الشبكة

لمكون NetworkRequest القدرة على إجراء مكالمات ArcGIS REST API لـ ArcGIS Online. للقيام بذلك، يتضمن المكون معالم من فئة XMLHttpRequest في JavaScript وأداة سطر الأوامر cURL (عنوان URL للعامل). يسمح هذا بترحيل الكود من تطبيق JavaScript على الويب إلى تطبيق QML الأصلي.

الترحيل من XMLHttpRequest إلى NetworkRequest

تشرح عينات الكود التالية الوظيفة ذاتها عبر كل من JavaScript وAppStudio AppFramework. قد يكون هذا مفيدًا كدليل عند ترحيل الكود من JavaScript إلى QML.

تستخدم عينة الكود XMLHttpRequest في JavaScript لإجراء طلب شبكة.

var req = new XMLHttpRequest();
var url = "http://www.arcgis.com/sharing/rest?f=json"
req.open("GET", url, true);
req.onreadystatechange = function() {
    console.log("readyState: ", req.readyState);
    if (req.readyState !== 4) return;
    if (req.status !== 200) return;
    console.log("responseText: ", req.responseText);
}
req.send();

تستخدم عينة الكود NetworkRequest في AppFramework لإجراء طلب الشبكة ذاته.

NetworkRequest {
    id: req
    url: "http://www.arcgis.com/sharing/rest?f=json"
    onReadyStateChanged: {
        console.log("readyState: ", readyState);
        if (readyState !== 4) return;
        if (status !== 200) return;
        console.log("responseText: ", responseText);
    }
}
function test() {
    req.send();
}

تعداد ReadyState

يتم تزويد خاصية readyState بتعداد، مع أعداد صحيحة تمثل قيم الخاصية المحتملة. يمكنك استخدام إما قيمة العدد الصحيح أو حالة JavaScript أو حالة NetworkRequest في التطبيق لديك بدون تغيير في السلوك، للسماح بالترحيل السهل من XMLHttpRequest.

Integer valueحالة JavaScriptNetworkRequest

0

UNSENT

ReadyStateUninitialized

1

OPENED

ReadyStateInitialized

2

HEADERS_RECEIVED

ReadyStateSending

3

LOADING

ReadyStateProcessing

4

DONE

ReadyStateComplete

معالجة الملف

يتمثل الاختلاف الرئيسي بين تطبيق الويب والتطبيق الأصلي في عدم قدرة تطبيقات الويب على الوصول إلى نظام الملفات، على عكس التطبيقات الأصلية. ينعكس الاختلاف في أن XMLHttpRequest لا يمكنه الوصول إلى الملفات، على عكس NetworkRequest. يلزم أن تتم طلبات الوصول إلى الملف في تطبيق ويب باستخدام cURL بدلاً من JavaScript.

لتحميل ملف باستخدام cURL، يتعين عليك القيام بما يلي:

curl \
    -F title="My Code Sample"
    -F type="Code Sample"
    -F tags="Code Sample"
    -F file="@CodeSample.zip"
    -F token="${ARCGIS_ONLINE_TOKEN}"
    http://http://www.arcgis.com/sharing/rest/content/users/jsmith/addItem

يحتوي NetworkRequest على خاصية uploadPrefix للتعامل مع الرموز اللازمة قبل اسم ملف. القيمة الافتراضية للخاصية هي @، للحفاظ على التوافق مع cURL. تشرح عينة الكود التالية السلوك ذاته، مكررًا باستخدام NetworkRequest.

property string user: "jsmith"
property string itemTitle: "My Code Sample"
property string itemType: "Code Sample"
property string itemTags: "Code, Sample"
property string itemFile: "CodeSample.zip"
property string token // ARCGIS_ONLINE_TOKEN
NetworkRequest {
    id: req    url: "http://www.arcgis.com/sharing/rest/content/users/%1/addItem".arg(user)
	function submit() {
        send( {
            "title": itemTitle,            "type": itemType,            "tags": itemTags,            "file": uploadPrefix + itemFile,            "token": token,            "f": "json"
        } );
    }
}

كائن JSON الذي يتم تمريره إلى طريقة الإرسال هو كائن JavaScript يحتوي على خريطة قاموس بقيمة أساسية. تصف خاصية method في NetworkRequest طبيعة طلب الشبكة. في حال ترك هذه الخاصية فارغة أو غير محددة، ستصبح افتراضية على طلب GET. إذا لزم تحميل ملف، يجب تعيين خاصية method على نشر.

نوع المحتوى الافتراضي

لتبسيط الطلبات على ArcGIS REST API، يقوم NetworkRequest بتعيين عنوان Content-Type افتراضيًا على application/x-www-form-urlencoded. يُعد هذا مطلوبًا عند استخدام ArcGIS Online REST API. سيعمل Content-Type هذا أيضًا لمعظم مواقع الويب الأخرى. ومع ذلك، بالنسبة لبعض مواقع الويب المحددة، مثل خدمات ويب Amazon، قد تكون بحاجة إلى مسح هذا الإعداد:

networkRequest.headers["Content-Type"] = "";