2011-09-26 5 views
6

मैं सिम्फनी (संस्करण 2) में एक नौसिखिया हूं, मेरे पास सादे मूल PHP के साथ एक परियोजना है, और अब मैं सिम्फनी ढांचे से निपटने में अपने पृष्ठों को फिर से शुरू कर रहा हूं, और मेरे jquery AJAX पर पहुंचा काम करता है, निश्चित रूप से, चीजें वाला अलग हो, मैं इस तरह करते थे:सिम्फनी में अजाक्स और Jquery

$("#div").click(function(){ 
    $.post("targetFile.php",{/*parameters*/,function(data){ }); 
}); 

प्रश्न: कि Symfony पर काम करता है बनाने के लिए? targetFile.php के बजाय क्या रखना है? एक मार्ग सबसे अधिक संभवतः। और नियंत्रक और राउटर पक्षों पर क्या करना है? मैंने Google और यहां देखा, लेकिन कोई स्पष्ट उत्तर नहीं मिला। सम्मान।

+0

आपको किस समस्या का सामना करना पड़ रहा है? – JamesHalsall

+0

एक जेक्री अजाक्स फ़ंक्शन सिम्फनी पर कैसे काम करता है? –

उत्तर

4

आप इस routing.yml अंदर सेट करते हैं:

_admin_ajax: 
    resource: "@SomethingAdminBundle/Controller/AjaxController.php" 
    type:  annotation 
    prefix: /admin/ajax 

... और नियंत्रक था अंदर ajax कॉल संभाल लेंगे इस:

/** 
* @Route("/ajaxhandler", name="_admin_ajax_handler") 
*/ 
public function handlerAction() { 

    $isAjax = $this->get('Request')->isXMLHttpRequest(); 
    if ($isAjax) { 
     //... 
     return new Response('This is ajax response'); 
    } 
    return new Response('This is not ajax!', 400); 
} 

... उदाहरण के लिए तो अंदर TWIG टेम्पलेट आप इसे इस तरह कॉल करना चाहिए:

$("#div").click(function(){ 
    $.post("{{ url('_admin_items_add') }}",{/*parameters*/,function(data){ }); 
}); 

... और आपकी कार्रवाई के लिए वास्तविक मार्ग टेम्पलेटिंग के साथ उत्पन्न होगा इंजन।

+0

ठीक है, मैं कोशिश करूंगा, लेकिन अगर टेम्पलेट एक php फ़ाइल है तो क्या होगा? एक यूआरएल के रूप में क्या रखना है। –

+0

उस समस्या को हल करना: '$ isAjax = $ this-> प्राप्त करें ('अनुरोध') -> isXMLHttpRequest(); 'वास्तव में मैं सिम्फनी तर्क नहीं समझता :), किसी भी तरह, धन्यवाद, मैं आपके समर्थन ब्रो की सराहना करता हूं । –

+0

और कैश साफ़ करने से भी प्रभावित हो सकता है, मैं यह नहीं कह सकता कि यह समाधान coz है जब भी मैं कुछ बदलता हूं, मैं हमेशा कैश साफ़ कर रहा था। –

5

आपको वास्तव में targetFile.php को अपने कस्टम मार्ग से प्रतिस्थापित करना होगा।

तो आप अपने routing.yml में यह पूछना चाहते हैं तो:

# app/config/routing.yml 
hello: 
    pattern:  /ajax/target 
    defaults:  { _controller: AcmeHelloBundle:Site:index } 

आप इस जावास्क्रिप्ट का उपयोग कर सकते हैं:

$("#div").click(function(){ 
    $.post("/ajax/target",{/*parameters*/,function(data){ }); 
}); 

AcmeHelloBundle की SiteController की विधि indexAction Symfony2 तरफ, होगा बुलाया जाए।

+0

देखें कि फायरबग मुझे क्या बताता है: नहीं मिला अनुरोधित यूआरएल/लक्ष्य इस सर्वर पर नहीं मिला था। जबकि मेरा राउटर है: 'लक्ष्य: पैटर्न:/लक्ष्य डिफ़ॉल्ट: {_ नियंत्रक: डब्ल्यूडब्ल्यूबंडल: डिफ़ॉल्ट: लक्ष्य} 'और मेरा जावास्क्रिप्ट' $ ("# div") है। (function() {$ .post ("/ target ", {/ * पैरामीटर * /, फ़ंक्शन (डेटा) {});}); 'और नियंत्रक' सार्वजनिक फ़ंक्शन लक्ष्य एक्शन() {$ वापसी करें-> प्रस्तुत करें ('डब्ल्यूडब्ल्यूबंडल: डिफ़ॉल्ट: target.html.php'); } 'श्रीमान डेमियन क्या गलत है? –

+0

ने अपने कैश को साफ़ करने का प्रयास किया? – JamesHalsall

+0

हाँ मैंने किया लेकिन अभी भी यह संदेश प्राप्त करें: "नेटवर्क त्रुटि: 404 नहीं मिला - http: // localhost/target"। –