2013-10-01 13 views
11

के साथ jQuery AJAX एक अंतराल के भीतर एक AJAX कॉल के बारे में मेरा कोई प्रश्न है। और यह क्यों काम नहीं करता है, या जिस तरह से काम करता है काम करते हैं।एक अंतराल

मैं (यह एक काम नहीं करता है)

setInterval($.ajax({ 
    //Place code here 
}), 2000); 

इस कोड है, लेकिन फिर मैं इसे इस तरह

setInterval(function() { 
    $.ajax({ 
    //Do ajax stuff here 
    }); 
}, 2000); 

अब यह काम करता है, लेकिन मेरे लिए इस तरह मैं सिर्फ बनाने के लग रहा है एक अतिरिक्त अज्ञात समारोह।

+2

आपको प्रत्येक अंतराल पर निष्पादित करने के लिए एक फ़ंक्शन प्रदान करने की आवश्यकता है। '$ .ajax' कोई फ़ंक्शन नहीं लौटाता है, इसलिए यह काम नहीं करता है। –

+0

महान प्रश्न @ रोब! उम्मीद है कि मेरे संपादन आपको मार्कडाउन के सही उपयोग को समझने में मदद करेंगे :) एक [मेटा पोस्ट] है (http://meta.stackexchange.com/questions/3122/formatting-sandbox) जो पोस्ट के साथ खेलने के लिए एक समर्पित सैंडबॉक्स है प्रारूप - शायद यह आपको मार्कडाउन के लिए उपयोग करने में भी मदद करेगा। – Lix

+2

@ संपादन के लिए लिक्स धन्यवाद :) –

उत्तर

11

setInterval स्ट्रिंग प्रारूप में फ़ंक्शन या निष्पादन योग्य कोड की आवश्यकता है।

पहला कॉल स्ट्रिंग के भीतर रखे जाने पर काम करेगा।

setInterval('$.ajax({ //Place code here })', 2000); 

इस वाक्य का प्रयोग eval का उपयोग कर के रूप में एक ही कारण के लिए हतोत्साहित किया जाता है।

setInterval भी पैराम्स की एक वैकल्पिक सूची ले सकता है। आप इस तरह इस तथ्य का लाभ लेने के लिए और उपयोग कर सकते हैं कुछ:

setInterval($.ajax/*a reference to the ajax function*/, 
2000, {url: 'someurl', success: onSuccess, error: onError}/*args passed to $.ajax*/ 
); 

ध्यान दें कि यह, वस्तु तरीकों कि this का उपयोग संदर्भ निर्धारित करने के लिए के लिए काम नहीं होगा, क्योंकि this का मूल्य window के लिए बाध्य होंगे। यही है, निम्नलिखित कार्य नहीं करेगा:

setTimeout($('h1').css, 1000, {'color': 'red'}); 
+1

क्या आप कोड नमूना बदल सकते हैं ताकि यह 'eval' का उपयोग न करे? मैं अस्वीकरण रखने के साथ ठीक हूँ। – Halcyon

+0

@ फ़्रिट्स्वानकंपेन, लेकिन भाई, यह मेरी पोस्ट में एकमात्र उदाहरण कोड है। –

+0

उत्तर देने के लिए धन्यवाद :) –

3

setInterval पहला तर्क (Reference) के रूप में एक समारोह की आवश्यकता है और यही कारण है कि setInterval($.ajax({ //Place code here }), 2000); काम नहीं करता है, क्योंकि $.ajax समारोह एक गुमनाम समारोह बनाता रिटर्न एक jQuery XMLHttpRequest object(Reference)

setInterval(function() { $.ajax({ //Do ajax stuff here }); }, 2000); वास्तव में लेकिन जब तक आप इसे string बनाने के लिए अपना कोड उद्धृत नहीं करते हैं तब तक आवश्यक है।

+0

उत्तर देने के लिए धन्यवाद :) –

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