لماذا لا AppCelerator Titanium Mobile Party هذا JSON؟
-
25-09-2019 - |
سؤال
باستخدام 1.4.1 مقابل Android بموجب Windows 7. لديّ خدمة ويب يمكن الوصول إليها من تطبيق Titanium ، تُرجع الخدمة JSON مثل هذا:
{
"VFPData": {
"rows": [
{
"address1": "Orion House",
"address2": "Orion Way",
"address3": "Kettering",
"address4": "Northants",
"comp_name": "Orion Vehicles Leasing",
"contid": 1,
"email": "",
"email2": "",
"fax": "",
"firstname": "David John",
"lastname": "Sear",
"mobile": "",
"phone1": "",
"phone2": "",
"postcode": "NN15 6PE"
},
{
"address1": "Unit 20 Acton Business Park",
"address2": "Acton Lane",
"address3": "London",
"address4": "",
"comp_name": "Orion Vehicles Limited",
"contid": 2,
"email": "Mark@ovl.co.uk",
"email2": "",
"fax": "",
"firstname": "Mark",
"lastname": "Johnson",
"mobile": "0888 566 67879",
"phone1": "0208 209 1359",
"phone2": "",
"postcode": "NW10 7NH"
}
]
}
}
ومع ذلك ، لن يعيد أي مزيج من eval أو json.parse نتيجة صالحة - على سبيل المثال:
var contacts = JSON.parse(this.responseText);
alert(contacts.length);
سيظهر ذلك حوار تنبيه مع عدم وجود شيء فيه. مكالمات التيتانيوم httpclient تعمل بشكل جيد قدر الإمكان
Ti.debug(this.responseText)
مع عدم وجود مشكلة.
أن JSON يتحقق موافق أيضًا ، في jsonlint.com على سبيل المثال.
المحلول
تبدو JSON جيدة ، وتواجهات جيدة ... ولكن هو الخط:
alert(contacts.length);
الجزء الوحيد الذي يقودك إلى الاعتقاد بأنه لا يعمل؟ نظرًا لأنه لا يمكنك الحصول على طول كائن (VFPDATA) ... ستحصل على غير محدد/فارغ سواء حدث تحليل صالح أم لا. اختبار أفضل هو:
alert(contacts.VFPData.rows.length);
... بما أنك تعرف الصفوف هي صفيف. أو:
alert(contacts);
الذي يجب أن يبلغ عن أنه كائن (إذا تم تحليله) أو فارغ/غير محدد خلاف ذلك.
لا تنتمي إلى StackOverflow