لماذا لا يقوم JQuery تلقائيا بإلغاء اتصال JSONP؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

ال $.getJSON() تنص الوثائق:

إذا كان عنوان URL المحدد موجود على خادم بعيد، يتم التعامل مع الطلب ك jsonp بدلا من ذلك. انظر مناقشة jsonp نوع البيانات في $ .jax () لمزيد من التفاصيل.

ال $.ajax() وثائق ل jsonp حالات نوع البيانات (التركيز الألغام):

الأحمال في كتلة JSON باستخدام JSONP. سوف تضيف إضافي "؟ رد الاتصال =؟" إلى نهاية عنوان URL الخاص بك لتحديد رد الاتصال.

لذلك يبدو أنه إذا اتصلت $.getJSON() مع عنوان URL عبر المجال، "رد الاتصال =؟" يجب إضافة المعلمة تلقائيا. (أجزاء أخرى من الوثائق تدعم هذا التفسير.)

ومع ذلك، أنا لا أرى هذا السلوك. إذا لم أقم بإضافة "رد الاتصال =؟" صراحة، يقوم jQuery بشكل غير صحيح بإجراء XMLHTPREQUEST (الذي يرجع البيانات الخالية لأنني لا أستطيع قراءة المجال عبر الاستجابة). إذا أضفته صراحة، فإن jQuery بشكل صحيح يجعلu003Cscript> request.

إليك مثال:

var URL = "http://www.geonames.org/postalCodeLookupJSON" +
    "?postalcode=10504&country=US";

function alertResponse(data, status) {
  alert("data: " + data + ", status: " + status);
}

$.getJSON(URL, alertResponse);
// alerts "data: null, status: success"

$.getJSON(URL + "&callback=?", alertResponse);
// alerts "data: [object Object], status: undefined"

ماذا يحصل؟ هل أنا أسيء الفهم من الوثائق أو نسيان شيء ما؟

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

شكرا!

(تحرير: أنا عبر نشر هذا في منتديات مستقبل إذا كنت مهتما.)

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

المحلول 2

اتضح أن هذا كان خطأ في وثائق مسج. يرى http://forum.jquery.com/topic/getjson-isn-t-automatically-pless-callback-to-my-cross-domain-urr. للتفاصيل.

نصائح أخرى

جرب هذا:

var URL = "http://www.geonames.org/postalCodeLookupJSON" +
    "?postalcode=10504&country=US";
function alertResponse(data, status) {
    alert("data: " + data + ", status: " + status);
}
$.ajax({
    url: URL,
    dataType: 'jsonp',
    jsonpCallback: 'alertResponse',
});

نعم، أعتقد أنك أسيء فهمها. $.getJSON هو اختصار ل $.ajax({datatype: 'json'.... كما تقول الوثائق. لا يجعل عدم استدعاء JSONP إلا إذا قمت بإضافة callback=? معامل.

أنا أستخدم أدناه رمز،

$ .jax ({url: url، datatype: 'jsonp'، النجاح: وظيفة (البيانات) {// القيام بشيء} خطأ: وظيفة (JQXHR، TextStatus، rorthrown) {}، jsonpcallback: 'logon_callback'،})؛

ولكن، يحصل رد الاتصال في بعض الأحيان في نهاية عنوان URL وأحيانا لا في IE. في حين أن العمل الجمهوري في الكروم و FF.

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