2012-11-20 18 views
8

यह मैं क्या मिलता है जब मैं अपने ajax अनुरोध फोन का एक स्क्रीन शॉट में एक अजाक्स अनुरोध करने के लिए:कैसे जूमला घटक

enter image description here

कैसे पूरे पृष्ठ के मुद्रण के बिना मैं केवल काम चला सकता हूँ?

$.ajax 
({ 
type: "POST", 
url: "index.php?option=com_similar&task=abc", 
    data: { 
     id: id, 
     name: name, 
     similar_id: similar_id, 
    }, 
cache: false, 
success: function(html) 
{ 
$("#flash").fadeOut("slow"); 
$("#content"+similar_id).html(html); 
} 
}); 
}); 

$(".close").click(function() 
{ 
$("#votebox").slideUp("slow"); 
}); 

}); 
+1

"पूरे पृष्ठ को प्रिंट किए बिना" का क्या मतलब है? कुछ प्रिंट नहीं करने के लिए? साथ ही, आप अपना पूरा AJAX अनुरोध नहीं दिखाते हैं, इसे समाप्त करना चाहिए}); । –

+0

स्क्रीनशॉट को देखो। मैंने पूर्ण AJAX नहीं लिखा था, क्योंकि मुझे नहीं लगता कि यह महत्वपूर्ण है – Jonuux

+0

मुझे नहीं लगता कि अपेक्षित आउटपुट क्या है? क्या कुछ भी होना चाहिए? उदाहरण के लिए –

उत्तर

28

बाहर निकलने के साथ जाना है या मर, जूमला नहीं है: यह मेरा ajax कॉल है! क्या इस सामान से निपटने का यह अच्छा तरीका है।

नीचे दिए गए उत्तरों जूमला में परीक्षण किए जाते हैं! 2.5 & 3 (1.5 के लिए भी काम कर सकते हैं)।


जनरल

कार्य के लिए आपका यूआरएल इस तरह देखने के लिए की जरूरत है:

index.php?option=com_similar&task=abc&format=raw

आप से नियंत्रक जो दृश्य का उपयोग करेगा बनाने के लिए, के एबीसी मान लीजिए , जिसमें फ़ाइल view.raw.html होगा (सामान्य दृश्य फ़ाइल के समान)।

नीचे आप एक कच्चे एचटीएमएल प्रतिक्रिया उत्पन्न करने के लिए कोड है:

/controller.php

public function abc() 
{ 
    // Set view 
    JRequest::setVar('view', 'Abc'); 
    parent::display(); 
} 

/views/abc/view.raw.php

<?php 
defined('_JEXEC') or die; 

jimport('joomla.application.component.view'); 

class SimilarViewAbc extends JView 
{ 
    function display($tpl = null) 
    { 
     parent::display($tpl); 
    } 
} 

/views/abc/tmpl/default.php

<?php 

echo "Hello World from /views/abc/tmpl/default.php"; 

नोट: यह समाधान करता है, तो मैं HTML वापस जाने के लिए (यह क्लीनर है और जूमला तर्क इस प्रकार) था मैं का उपयोग होता है। सरल JSON डेटा लौटने के लिए, नीचे देखें कि नियंत्रक में सबकुछ कैसे रखा जाए।


यदि आप एक subcontroller करने के लिए अपने अजाक्स अनुरोध करते हैं, जैसे:

index.php?option=com_similar&controller=abc&format=raw

अपने subcontroller नाम से

(कच्चे दृश्य के लिए) abc.raw.php की जरूरत है।

इसका मतलब यह भी है कि आप एबीसी नामक 2 उप-नियंत्रक होंगे।

यदि आप जेएसओएन वापस करते हैं, तो format=json और abc.json.php का उपयोग करना समझ में आता है। जूमला 2.5 में। मुझे इस विकल्प को काम करने के लिए कुछ समस्याएं मिलीं (किसी भी तरह से आउटपुट दूषित हो गया था), इसलिए मैंने कच्चा इस्तेमाल किया।


आप करने की जरूरत है एक मान्य JSON प्रतिक्रिया उत्पन्न, डॉक्स पेज Generating JSON output

// We assume that the whatver you do was a success. 
$response = array("success" => true); 
// You can also return something like: 
$response = array("success" => false, "error"=> "Could not find ..."); 

// Get the document object. 
$document = JFactory::getDocument(); 

// Set the MIME type for JSON output. 
$document->setMimeEncoding('application/json'); 

// Change the suggested filename. 
JResponse::setHeader('Content-Disposition','attachment;filename="result.json"'); 

echo json_encode($response); 

आप आम तौर पर नियंत्रक में इस कोड डाल की जाँच (यदि आप एक मॉडल फोन करेगा जो वापस आ जाएगी, तो आपके द्वारा एन्कोड किया गया डेटा - एक बहुत ही सामान्य परिदृश्य)। यदि आपको इसे आगे ले जाने की आवश्यकता है, तो आप कच्चे उदाहरण के समान JSON व्यू (view.json.php) भी बना सकते हैं।


सुरक्षा

अब जब कि Ajax अनुरोध काम कर रहा है, पृष्ठ अभी तक बंद नहीं करते। नीचे दिया गया पढ़ें।

अनुरोध फोर्जरी के लिए जाँच करना न भूलें। JSession::checkToken() यहां काम में आते हैं। कैसे CSRF anti-spoofing to forms


बहुभाषी साइटों जोड़ने के बारे में दस्तावेज़ पढ़ें

यह हो सकता है कि अगर आप अनुरोध में भाषा नाम न भेजें, जूमला आप चाहते भाषा स्ट्रिंग का अनुवाद नहीं होंगे ।

किसी भी तरह से आपके अनुरोध पर लैंग पैराम (जैसे &lang=de) को जोड़ने पर विचार करें।


जूमला 3.2 में नया! - Joomla! Ajax Interface

जूमला अब प्लगइन या मॉड्यूल में अजाक्स अनुरोध को संभालने का हल्का तरीका प्रदान करता है। आप जूमला का उपयोग करना चाह सकते हैं! अजाक्स इंटरफ़ेस यदि आपके पास पहले से कोई घटक नहीं है या यदि आपको पहले से मौजूद मॉड्यूल से अनुरोध करने की आवश्यकता है।

+2

ग्रेट पोस्ट! कभी-कभी जूमला के बारे में जागरूक होने के लिए अजाक्स के लिए कच्चे प्रदर्शन में परेशानी होती है ... http://forum.joomla.org/viewtopic.php?p=1915019। मुझे इस कारण से देखने के बजाय अपने AJAX कॉल के लिए अपने नियंत्रक से आउटपुट गूंजना पड़ा है। – Cleanshooter

+1

@ क्लेन्सशूटर - मैंने उप-नियंत्रकों से निपटने के बारे में कुछ जानकारी जोड़ दी है।मैं अपने घटकों में AJAX का बहुत उपयोग करता हूं और अब तक मुझे इस सामान से निपटने में कोई समस्या नहीं है। यदि आपको कोई समस्या है तो यहां कुछ कोड पोस्ट करने के लिए स्वतंत्र महसूस करें जो काम नहीं करता है ताकि हम जूमला कैसे अधिक गुणवत्ता की जानकारी एकत्र कर सकें! काम करता है। धन्यवाद। –

+0

@ वेलेंटीनडेस्पा - आपके view.raw.php कोड में एक टाइपो है। parrent :: प्रदर्शन ($ tpl) माता-पिता :: प्रदर्शन ($ tpl) होना चाहिए। – mozami

0

यदि आप कुछ HTML तत्व में प्रतिक्रिया आउटपुट शामिल करना चाहते हैं, तो ऊपर वर्णित अनुसार अपने यूआरएल में प्रारूप = कच्चे संलग्न करें। तो फिर तुम इस तरह एक नियंत्रक समारोह हो सकता है:

function abc(){ 

//... handle the request, read variables, whatever 
print "this is what I want to place in my html"; 

} 

AJAX प्रतिक्रिया उत्पादन सब कुछ आप मुद्रित होगा/नियंत्रक में गूँजती।

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