كيف يمكنني استخدام JSONP لتنزيل كائنات JavaScript جانب العميل؟

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

سؤال

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

الهندسة المعمارية الأساسية هي:

  1. بينغ API خارجي لإعادة كائن JSON
  2. عمل عميل العمل مع هذا الكائن، وفي النهاية لديه رابط "تنزيل لي"
  3. يرسل هذا الرابط البيانات إلى الخادم الخاص بي، والذي يعالجه ويرسله مرة أخرى مع نوع MIME application/json, ، والتي (يجب) مطالبة المستخدم بتنزيل الملف محليا.

الآن هنا القطع الخاصة بي:

الرمز جانب الخادم

<?php
$data = array('zero', 'one', 'two', 'testing the encoding');  
$json = json_encode($data);  
//$json = json_encode($_GET['']); //eventually I'll encode their data, but I'm testing
header("Content-type: application/json"); 
header('Content-Disposition: attachment; filename="backup.json"'); 
echo $_GET['callback'] . ' (' . $json . ');';
?>

رمز جانب العميل ذي الصلة

$("#download").click(function(){
    var json = JSON.stringify(collection); //serializes their object
    $.ajax({
       type: "GET",
       url: "http://www.myURL.com/api.php?callback=?", //this is the above script
       dataType: "jsonp",
       contentType: 'jsonp',
       data: json,
       success: function(data){
           console.log( "Data Received: " + data[3] );
       }
    });
    return false;
});

الآن عندما أزور api.php موقع مع فايرفوكس، يطالب بتنزيل download.json وهذا ينتج عنه هذا الملف النصي، كما هو متوقع:

 (["zero","one","two","testing the encoding"]);

وعندما نقر #download لتشغيل مكالمة AJAX، فإنها تسجل في Firebug

Data Received: testing the encoding

وهو ما هو تقريبا ما كنت أتوقعه. أنا أتلقى سلسلة JSON وتسلسلها، وهو أمر رائع. أنا أفتقد شيئين:

الأسئلة الفعلية

  1. ما الذي يجب علي فعله للحصول على نفس السلوك الفوري للتنزيل الذي أحصل عليه عند زيارة الصفحة في متصفح
  2. (أبسط بكثير) كيف يمكنني الوصول أو جانب الخادم أو كائن JSON الذي يتم إرساله إلى الخادم إلى Serialize IT؟ أنا لا أعرف ما هو الفهرس الموجود في صفيف الحصول على (سخيفة، وأنا أعلم، لكنني حاولت كل شيء تقريبا)
هل كانت مفيدة؟

المحلول

  1. تحتاج إلى إخبار المتصفح بزيارة الصفحة، عادة عن طريق الإعداد window.location.
  2. نظرا لأنها سلسلة، سيتم إرسالها كجزء من سلسلة الاستعلام الخام. حاول البحث $_SERVER['QUERY_STRING'] لذلك.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top