سؤال

يا الجميع، أنا أعمل على عنصر واجهة مستخدم ل Dashboard Apple واجهت مشكلة أثناء محاولة الحصول على بيانات من الخادم الخاص بي باستخدام وظيفة JQuery's Ajax. إليك رمز JavaScript الخاص بي:

$.getJSON("http://example.com/getData.php?act=data",function(json) { 
    $("#devMessage").html(json.message)
    if(json.version != version) {
        $("#latestVersion").css("color","red")
    }
    $("#latestVersion").html(json.version)
})

ويستجيب الخادم مع هذا JSON:

{"message":"Hello World","version":"1.0"}

لسبب ما، عندما أقوم بتشغيل هذه الحقول على عنصر واجهة المستخدم لا تتغير. من تصحيح الأخطاء، لقد تعلمت أن القطعة لا تقدم الطلب إلى الخادم، لذلك يجعلني أعتقد أن Apple لديها نوع من كتلة URL الخارجية في مكانه. أعلم أن هذا لا يمكن أن يكون صحيحا، لأن العديد من الحاجيات المنزلية للهاتف للتحقق من التحديثات.

هل لدى أي شخص أي أفكار حول ما يمكن أن يكون خطأ؟

تحرير: أيضا، يعمل هذا الرمز بشكل جيد تماما في رحلات السفاري.


بناء على طلب لوكا، إليك رمز PHP و JavaScript الذي يعمل الآن:

بي أتش بي:

echo $_GET["callback"].'({"message":"Hello World","version":"1.0"});';

جافا سكريبت:

function showBack(event)
{
var front = document.getElementById("front");
var back = document.getElementById("back");

if (window.widget) {
    widget.prepareForTransition("ToBack");
}

front.style.display = "none";
back.style.display = "block";
stopTime();
if (window.widget) {
    setTimeout('widget.performTransition();', 0);
}
$.getJSON('http://nakedsteve.com/data/the-button.php?callback=?',function(json) { 
    $("#devMessage").html(json.message)
    if(json.version != version) {
        $("#latestVersion").css("color","red")
    }
    $("#latestVersion").html(json.version)
})
}
هل كانت مفيدة؟

المحلول

في DASHCODE انقر. سمات القطعة ومن بعد السماح بالوصول إلى الشبكة تأكد من فحص هذا الخيار. لقد بنيت شيئا رفضا ببساطة العمل، وكان هذا هو الحل.

نصائح أخرى

لا يسمح بطلبات Ajax المجال (باستخدام كائن XMLHTPREQUEST / ActiveX) في المعيار الحالي، حسب W3C المواصفات:

لا تتضمن هذه المواصفات الميزات التالية التي يتم النظر فيها في إصدار مستقبلي من هذه المواصفات:

  • عبر الموقع xmlhttprecest؛

ومع ذلك هناك 1 تقنية من القيام ajax طلبات المجال عبر jsonp., ، من خلال تضمين علامة البرنامج النصي على الصفحة، ومع تكوين خادم صغير.

يدعم مسج هذه, ، ولكن بدلا من الاستجابة على الخادم الخاص بك مع هذا

{"message":"Hello World","version":"1.0"}

سترغب في الرد مع هذا:

myCallback({"message":"Hello World","version":"1.0"});

mycallback. يجب أن تكون القيمة في المعلمة "رد الاتصال" الذي مرته في وظيفة $ .getjson (). لذلك إذا كنت أستخدم PHP، فإن هذا يعمل:

echo $_GET["callback"].'({"message":"Hello World","version":"1.0"});';

يحتوي Apple على نوع من كتلة URL الخارجية في مكانه.

في معلوماتك. لا تحتاج إلى أن يكون لديك ALLOWNETWORKACCESS SET إلى TRUE.

<key>allowNetworkAccess</key>
<true/>

يعمل التعليمات البرمجية الخاصة بك في Safari لأنه غير مقيد في لوحة القيادة، وهي ليست معايير مصادقة في أنها تسمح بموقع متقاطع Ajax. FF هو المعايير الصالحة في ذلك لا تسمح بموقع متقاطع Ajax.

إذا كنت تقوم بإنشاء عنصر واجهة مستخدم لوحة المعلومات، فلماذا لا تستخدم وظيفة إعداد XMLHTPREQUEST في مكتبة التعليمات البرمجية من Dashcode. بنيت Apple هذه حتى لا تحتاج إلى تثبيت مكتبات الطرف الثالث JS. لست متأكدا من دعم JSON ولكن ربما بدأت هنا سيقودك في اتجاه أفضل.

مثيرة للاهتمام أن يعمل في رحلات السفاري. بقدر ما أعرف أن تفعل طلبات AJAX المجال X. تحتاج إلى استخدام نوع بيانات JSONP.

http://docs.jquery.com/ajax/jquery.getjson.

http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/

أساسا تحتاج إلى إضافة callback=? إلى سلسلة الاستعلام الخاصة بك وسيقوم jQuery باستبدالها تلقائيا بالطريقة الصحيحة على سبيل المثال:

$.getJSON("http://example.com/getData.php?act=data&callback=?",function(){ ... });

تحرير: ضع callback=? بت في نهاية سلسلة الاستعلام فقط لتكون آمنة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top