هل من الممكن تقديم الطلبات عبر المجال في جافا سكريبت و مجموعة مخصصة الرؤوس ؟

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

سؤال

منذ كنت لا يمكن تطبيق رؤوس مخصصة على JSONP المكالمات, كيف يمكنني جعل الصليب المجال الطلبات وتطبيق رؤوس مخصصة باستخدام jQuery ؟

أنا في الأساس محاولة الوصول إلى محرر مستندات جوجل مع مسج و تحتاج إلى تمرير رمز والتوثيق:

var token = "my-auth-token";
$.ajax({
  url: "http://docs.google.com/feeds/documents/private/full?max-results=1&alt=json",
  dataType: 'json',
  beforeSend: function(xhr) {
    xhr.setRequestHeader("Authorization", "GoogleLogin auth=" + token);
  },
  success: function(data, textStatus, XMLHttpRequest) {
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
  }
});

ملاحظة:الهدف من هذا هو تماما تجاوز طبقة التطبيق.انها بسيطة لاستخدام روبي للاتصال بيانات جوجل API, لكنه يأخذ الكثير من الموارد تحليل الأعلاف في كل وقت من جانب الخادم.

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

المحلول

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

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

سوف تحتاج أيضا إلى إضافة أي صورة إلى الصفحة الخاصة بك التي تتواجد في نفس المجال.يمكن أن تكون مخفية مع CSS, طالما في DOM.

باستخدام المثال في المدونة المذكورة أعلاه, وكنت قادرا على استرداد المستندات قائمة مع جافا سكريبت وحده.هنا تعديل تهيئة وظيفة اعتدت على التخلص من لانهائية إذن حلقة:

function initialize() {
    var scope = 'http://docs.google.com/feeds/';

    if (google.accounts.user.checkLogin(scope)) {
        var service = new google.gdata.client.GoogleService('writely', 'DocList-App-v1.0');   
        service.getFeed(scope + 'documents/private/full/', handleFeed, handleError);  
    } else {
        var loginButton = $("<button>Click here to login</button>");
        loginButton.click(function() {
            var token = google.accounts.user.login(scope); // can ignore returned token  
        });
        $("body").append(loginButton);
    }
};  
​

نصائح أخرى

تنظر إلى كتابة بعض التعليمات البرمجية في جانب الملقم الذي يلعب وكيل والسماح مسج نسميها.

  • إذا كنت تستخدم PHP, استخدام curl.
  • إذا كنت تستخدم جافا, استخدام URLConnection أو أكثر convenienced أباتشي HttpClient.
  • إذا كنت تستخدم C#/.صافي, استخدام WebClient.
  • إذا كنت تستخدم روبي, استخدام Net::HTTP.

يمكنك ، طالما أن المجال الخارجي يسمح به عن طريق إرسال مناسب Access-Control-Allow-Origin رأس. ثم فقط استخدم XMLHttpRequest واجهة برمجة التطبيقات في المتصفحات التي تدعم واجهة برمجة تطبيقات XHR المتقاطعة القياسية و XDomainRequest في IE.

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