2012-10-18 9 views
11

मैं AJAX के लिए बिल्कुल नया हूं। मैं AJAX का उपयोग कर सर्वर पर एक अनुरोध भेज रहा हूँ। सेवा एक पाठ फ़ाइल देता है। लेकिन डेटा लौटाए जाने पर कोई डाउनलोड बॉक्स नहीं दिखाई देता है। बाकी सेवा है कि फाइल रिटर्न इस प्रकार है: इस प्रकारअजाक्स कॉल को रीस्टफुल सेवा से लौटाई गई फ़ाइल डाउनलोड करने के लिए कॉल करें

@Path("/examples") 
public class ExampleCodesRest { 


    @POST 
    @Path("/getcode") 
    @Produces(MediaType.TEXT_PLAIN) 
    public Response getCodes(@Context ServletContext context){ 

     String in=context.getRealPath("/WEB-INF/reports.jrxml"); 
     File file=new File(in); 

     ResponseBuilder response = Response.ok((Object) file); 
     response.header("Content-Disposition", 
      "attachment; filename=\"file_from_server.log\""); 
     return response.build(); 

    } 
} 

मेरे AJAX कॉल है:

$('a#link').click(function(event){ 
    event.preventDefault(); 
    $.ajax({ 
     url: '/reports/rest/examples/getcode', 
     type: 'POST' 
    }); 
}); 

फ़ाइल AJAX के बिना सफल डाउनलोड करता है। AJAX के साथ, यह फ़ाइल डाउनलोड नहीं करता है। कृपया सलाह दें।

+0

[एजेक्स पोस्ट से हैंडल फ़ाइल डाउनलोड] के संभावित डुप्लिकेट (http://stackoverflow.com/a/23797348/148271) – IsmailS

उत्तर

17

सलाह सरल है: आप AJAX के माध्यम से फ़ाइलों को डाउनलोड नहीं कर सकते - यह एक सुरक्षा नीति है। मेरा मतलब है कि आप डेटा डाउनलोड कर सकते हैं, लेकिन आप इसे जावास्क्रिप्ट पक्ष से डिस्क पर सहेज नहीं सकते हैं।

यदि आप क्लिक पर एक फ़ाइल डाउनलोड करना चाहते हैं, तो आप a टैग पर केवल href जोड़ सकते हैं। या फ़ाइल की URL के साथ एक नई विंडो खोलें।

+0

उत्तर के लिए धन्यवाद। कुछ शोध के बाद ऐसा लगता है कि अधिकतर मैं सामग्री दिखाने के लिए एक विंडो खोल सकता हूं लेकिन मैं इसे डिस्क पर सहेज नहीं सकता। –

1

ए) आप डेटा को वापस प्राप्त करने के लिए
ख) आप कोड के लिए त्रुटि कॉलबैक जोड़े एक कॉलबैक की जरूरत नहीं है तो तुम अगर वहाँ कॉल के बाद प्राप्त त्रुटियाँ हैं देख सकते हैं:

$.ajax({ 
    url: '/spaconsole/rest/examples/getcode', 
    type: 'POST' 
    success: function (data) { 
     console.log('ok'); 
    }, 
    error: function (xhr) { 
     console.log(xhr); 
    } 
    }); 

संपादित करें: यह अगर आप पेज में टेक्स्ट प्रदर्शित करना चाहते हैं। अगर आप फ़ाइल डाउनलोड करना चाहते हैं, तो यह तरीका नहीं है, आप AJAX

+0

उत्तर के लिए धन्यवाद। मुझे सर्वर के अंत से डेटा मिल रहा है लेकिन डिस्क पर डेटा को सहेजने के लिए कोई संकेत नहीं है। –

1

का उपयोग नहीं कर सकते हैं, आप सीधे AJAX से ऐसा नहीं कर सकते हैं, लेकिन आप डाउनलोड शुरू करने वाले आईफ्रेम के जरिए इसे प्राप्त कर सकते हैं। चर्चा के लिए Ajax File download Issue देखें।

संबंधित मुद्दे