jQuery 3.3

jQuery.ajaxTransport()




jquery

jQuery.ajaxTransport (dataType، handler) الإرجاع: undefined

الوصف ؛: إنشاء كائن يتعامل مع النقل الفعلي لبيانات Ajax.

  • وأضاف الإصدار: 1.5 jQuery.ajaxTransport (dataType ، معالج)

    • نوع البيانات
      اكتب: String
      سلسلة تحدد نوع البيانات المراد استخدامه
    • معالج
      النوع: Function (خيارات PlainObject ، PlainObject originalOptions ، jqXHR jqXHR)
      معالج لإعادة كائن النقل الجديد لاستخدامه مع نوع البيانات المتوفر في الوسيطة الأولى.

النقل هو كائن يوفر طريقتين ، send abort ، يتم استخدامهما داخليًا بواسطة $.ajax() لإصدار الطلبات. يعتبر النقل هو الطريقة الأكثر تقدمًا لتحسين $.ajax() ويجب استخدامه فقط كحل أخير عندما تكون $.ajax() والمحولات غير كافية.

نظرًا لأن كل طلب يتطلب مثيل كائن النقل الخاص به ، فلا يمكن تسجيل وسائل النقل مباشرة. لذلك ، يجب عليك توفير وظيفة تقوم بإرجاع النقل بدلاً من ذلك.

يتم تسجيل مصانع النقل باستخدام $.ajaxTransport() . يشبه التسجيل النموذجي ما يلي:

$.ajaxTransport( dataType, function( options, originalOptions, jqXHR ) {
  if( /* transportCanHandleRequest */ ) {
    return {
      send: function( headers, completeCallback ) {
        // Send code
      },
      abort: function() {
        // Abort code
      }
    };
  }
});

أين:

  • options هي خيارات الطلب
  • originalOptions هي الخيارات المتوفرة على طريقة $.ajax() ، غير معدلة ، وبالتالي ، بدون افتراضيات من ajaxSettings
  • jqXHR هو كائن jqXHR للطلب
  • headers هي كائن من رؤوس الطلبات (مفتاح - القيمة) التي يمكن نقل النقل إذا كان يعتمدها
  • completeCallback هو رد الاتصال المستخدم لإعلام Ajax باستكمال الطلب

يحتوي fullCallback على التوقيع التالي:

function( status, statusText, responses, headers ) {}

أين:

  • status هي رمز حالة HTTP للاستجابة ، مثل 200 للنجاح النموذجي ، أو 404 عندما لا يتم العثور على المورد.
  • statusText هي الحالةلجولة الاستجابة.
  • responses (اختياري) هو كائن يحتوي على dataType / value الذي يحتوي على الاستجابة في جميع التنسيقات التي يمكن أن يوفرها النقل (على سبيل المثال ، كائن XMLHttpRequest الأصلي سيعين الردود على { xml: XMLData, text: textData } للإجابة التي هي وثيقة XML)
  • headers (اختياري) عبارة عن سلسلة تحتوي على كافة رؤوس الاستجابة إذا كان النقل لديه حق الوصول إليها (شبيه بما يوفره XMLHttpRequest.getAllResponseHeaders() .

تمامًا مثل الفلاتر المسبقة ، يمكن إرفاق وظيفة مصنع النقل ببيانات محددة نوع:

$.ajaxTransport( "script", function( options, originalOptions, jqXHR ) {
  // Will only be called for script requests
});

يوضح المثال التالي كيف يمكن تنفيذ نقل صورة أدنى:

$.ajaxTransport( "image", function( s ) {
  if ( s.type === "GET" && s.async ) {
    var image;
    return {
      send: function( _ , callback ) {
        image = new Image();
        function done( status ) {
          if ( image ) {
            var statusText = ( status === 200 ) ? "success" : "error",
              tmp = image;
            image = image.onreadystatechange = image.onerror = image.onload = null;
            callback( status, statusText, { image: tmp } );
          }
        }
        image.onreadystatechange = image.onload = function() {
          done( 200 );
        };
        image.onerror = function() {
          done( 404 );
        };
        image.src = s.url;
      },
      abort: function() {
        if ( image ) {
          image = image.onreadystatechange = image.onerror = image.onload = null;
        }
      }
    };
  }
});

التعامل مع أنواع البيانات المخصصة

يأتي تطبيق jQuery Ajax مع مجموعة من البيانات القياسية ، مثل النصوص ، json ، xml ، و html.

استخدم الخيار converters في $.ajaxSetup() لزيادة أو تعديل استراتيجيات تحويل نوع البيانات المستخدمة بواسطة $.ajax() .

يتضمن مصدر jQuery unminified نفسه قائمة من المحولات الافتراضية ، والتي توضح بشكل فعال كيف يمكن استخدامها:

// List of data converters
// 1) Key format is "source_type destination_type"
//    (a single space in-between)
// 2) The catchall symbol "*" can be used for source_type
converters: {
  // Convert anything to text
  "* text": window.String,
  // Text to html (true = no transformation)
  "text html": true,
  // Evaluate text as a json expression
  "text json": jQuery.parseJSON,
  // Parse text as xml
  "text xml": jQuery.parseXML
}

عند تحديد خيار converters عالميًا في $.ajaxSetup() أو لكل مكالمة في $.ajax() ، سيتم تعيين الكائن إلى المحولات الافتراضية ، $.ajax() تلك التي تحددها ويترك الآخرين بدون تغيير.

على سبيل المثال ، يستخدم مصدر jQuery $.ajaxSetup() لإضافة محول لـ "نص نصي":

jQuery.ajaxSetup({
  accepts: {
    script: "text/javascript, application/javascript"
  },
  contents: {
    script: /javascript/
  },
  converters: {
    "text script": jQuery.globalEval
  }
});