باستخدام وظيفة اسمه كما رد دولار.getJSON في مسج لتلبية Facebook طلب توقيع مطالب

StackOverflow https://stackoverflow.com/questions/203194

سؤال

أحاول الوصول إلى Facebook API المشرف.getMetrics طريقة عن طريق مسج.أنا صحيح تأليف url الطلب على جانب الملقم (من أجل الحفاظ على بلدي التطبيق سري).أنا ثم إرسال عنوان الموقع على المتصفح أن يكون الطلب باستخدام jQuery.getJSON().

Facebook يتطلب إرسال نسخة من الطلب params تجزئته مع طلبي سر جنبا إلى جنب مع طلب للتحقق من بلدي صحتها.المشكلة هي أنه مسج يريد أن تولد اسم وظيفة رد الاتصال نفسها من أجل مباراة اسم ذلك يعطي وظيفة مجهول يمكنك تمرير في أن يطلق عندما تكون البيانات العوائد.وبالتالي فإن اسم الدالة غير متوفرة حتى jQuery.getJSON() ينفذ و Facebook ترى طلبي أن يكون زائف بسبب متطابقة التوقيع (توقيع أبعث على طول لا يشمل الصحيح رد المعلمة لأن ذلك لم يكن ولدت حتى jQuery.getJSON() ركض).

الطريقة الوحيدة التي أستطيع أن أفكر في الخروج من هذه المشكلة بطريقة أو بأخرى في تحديد اسم الوظيفة jQuery.getJSON() بدلا من السماح لها أن تبقى مجهولة.ولكن لا أستطيع أن أجد أي خيار القيام بذلك في مسج AP.

هل كانت مفيدة؟

المحلول 2

واستخدام jQuery.getScript تبين أن تكون قريبة من - ولكن ليس تماما - الجواب. باستخدام getScript يلغي الحاجة مسج لإضافة وظيفة مجهول اسمه حيوي لبارامس الطلب (على الرغم من أنها لا تزال تفعل ذلك إذا كنت المضي قدما ونقله إلى وظيفة غير معروفة كما في التعليمات البرمجية أعلاه). ومع ذلك، فإن التقصير في jQuery.getScript، كما هو الحال في جميع المكالمات الأخرى في مكتبة أياكس مسج، هي لإلحاق مزيد من _=12344567 حجة إضافية (حيث 1234567 حقا هو الطابع الزمني). مسج يفعل ذلك لمنع المتصفح من التخزين المؤقت استجابة. ومع ذلك، هذا فواصل إضافية توقيع بلدي الطلب تماما مثل وظيفة رد اسمه السيارات.

ومع بعض المساعدة على #jquery، تعلمت أن الطريقة الوحيدة للحصول على مسج لا لفوضى على الإطلاق التي تحتوي على معاملات الخاص بك هو لإجراء الطلب باستخدام طريقة قاعدة jQuery.Ajax مع الوسائط التالية:

jQuery.ajax({
  url: fbookUrl,
  dataType: "script",
  type: "GET",
  cache: true,
  callback: null,
  data: null
});

و(حيث fbookUrl هو رابط API الفيسبوك أحاول أن تطلب التي تحتوي على معاملات الكاملة بما في ذلك التوقيع وcallback=myFunction). يحدد ARG dataType: "script" أن JSONP الناتجة يجب أن تكون محشوة في علامة البرنامج النصي على الصفحة للتنفيذ، cache: true يقول مسج السماح للمتصفح إلى ذاكرة التخزين المؤقت استجابة، أي لتخطي إضافة المعلمة الطابع الزمني.

نصائح أخرى

وكان الشيء الوحيد الذي فعل العمل بالنسبة لي الإعدادات التالية

وjQuery.ajax({ url: fbookUrl, dataType: "jsonp", type: "GET", cache: true, jsonp: false, jsonpCallback: "MyFunctionName" //insert here your function name });

يمكنك تمرير JSONP الخيار دولار.ajaxSetup من شأنها أن تسمح لك لإصلاح اسم الدالة التي يحصل اتصلت مستندات النحو التالي:

jsonp سلسلة
تجاوز وظيفة رد الاتصال الاسم في jsonp الطلب.هذه القيمة سوف تستخدم بدلا من 'رد' في 'رد=?' جزء من سلسلة الاستعلام في url من أجل الحصول على أو البيانات عن بعد.حتى {jsonp:'onJsonPLoad'} من شأنه أن يؤدي إلى 'onJsonPLoad=?' مرت إلى الملقم.

انظر هنا http://docs.jquery.com/Ajax/jQuery.ajax#options لمزيد من التفاصيل

وهذا هو أفضل حل مع رد اتصال ثابتة:

window.fixed_callback = function(data){
    alert(data.title);
};

$(function() {
    $.getScript("http://api.flickr.com/services/feeds/photos_public.gne?tags=cats&tagmode=any&format=json&jsoncallback=fixed_callback", function(data) {
    alert('done'); } );
});

والمشكلة مع هذا الاستدعاء هي أن تتمكن من التعامل مع نوع واحد فقط من الطلب في الوقت الذي يتم فيه تسجيل وظيفة على مستوى العالم. ان وظيفة رد يكون على الأرجح أن تتحول إلى المرسل لأنواع مختلفة من البيانات التي يمكن استرداد واستدعاء الدالة المناسبة.

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