2012-06-25 24 views
9

पर वेरिएबल्स को पास कर रहा है। मैं JSON URL के सेट के माध्यम से लूप को JQuery $ .ajax का उपयोग कर रहा हूं और परिणामों को सरणी में डाउनलोड कर रहा हूं। कुछ यूआरएल 404 लौटाते हैं - जिसे मैं & को एक संदेश भेज रहा हूं।jQuery AJAX सफलता या त्रुटि फ़ंक्शन

हालांकि, मैं यूआरएल पास नहीं कर पा रहा हूं, अधिक सटीक यह हमेशा सरणी में अंतिम यूआरएल पास करता है।

मुझे लगता है क्योंकि ajax अतुल्यकालिक है और इसे पूरा करने के लिए समय लेता है कि है, लेकिन मुझे यकीन है कि और कैसे यकीन है कि केवल वर्तमान JSON url (या चर) बनाने के लिए सफलता या त्रुटि

मेरे कोड पर दिखाया जा रहा है नहीं कर रहा हूँ :

// For every URL loop through 'baseitems' array 
for (var i = 0; i < baseitems.length; i++) { 

    // This is where I'm hoping to store the current URL as a variable to pass to the end-user on Success or Error 
    var caturl = baseURL + "/" + baseitems[i]; 

    // Get the data via JSON 
    $.ajax({ 
    type: "GET", 
    url: caturl, 
    dataType: "json", 
    async: true, // set so that the variables caturl get updated below 
    success: function (result) { 
     // Success: store the object into catalog array 
     cat.unshift(result); 
     $('#showdata').prepend("Loaded: " + caturl + "</br>"); // still buggy here - probably async JSON issue 
    }, 
    error: function (xhr, textStatus, error) { 
     // Error: write out error 
     console.log(xhr.statusText); 
     console.log(textStatus); 
     console.log(error); 
     $('#showdata').prepend("ERROR : '" + error + "' trying to access: " + caturl + "</br>"); // still buggy here - probably async JSON issue 
    } 
}); 

}

** अद्यतन: श्रमजीवी कोड **

@charlietfl मदद + कुछ अच्छी बात यह है के साथ पूरा काम कर कोड सफलता/त्रुटि कोड की तरह + लोड यूआरएल की गिनती नीचे है। धन्यवाद charlietfl & शांति निर्माता!

   $.ajax({ 
        type: "GET", 
        url: caturl, 
        dataType: "json", 
        async: true, // set so that the variables caturl get updated below 
        beforeSend: function (jqXHR, settings) { 
         /* add url property and get value from settings (or from caturl)*/ 
         jqXHR.url = settings.url; 
        }, 
        success: function (result, textStatus, jqXHR) { 
         // Success: store the object into catalog array 
         var url = jqXHR.url; 
         cat.unshift(result); 
         $('#showdata').prepend("<font size=\"1\">Loading: " + url + " status: " + textStatus + "</font></br>"); 
         successcount += 1; 

        }, 
        /* error to be deprecated in jQuery 1.8 , superseded by "fail" */ 
        error: function (jqXHR, textStatus, error) { 
         var url = jqXHR.url; 
         /* replace caturl with url in your append */ 
         $('#showdata').prepend("<font size=\"1\" color=\"red\">ERROR : '" + error + "' trying to access: " + url + "</font></br>"); 
        }, 
        complete: function (jqXHR, textStatus) { 
         $('#showdata').prepend("<font size=\"3\">Loaded <b>" + successcount + "</b> of " + baseitems.length + " total catalogs.</font></br>") 
        } 
       }); 
+0

क्या आपने AJAX कॉल में caturl पर फ़ंक्शन में 'caturl' के मान को पारित करने का प्रयास किया है, फिर परिणाम में इसे वापस पास कर दिया है? वैकल्पिक रूप से, जैसा कि आप पहले से ही सर्वर पर यूआरएल जानते हैं, आप इसे AJAX सफलता 'परिणाम' पर वापस भेजते हैं और इसका उपयोग – peacemaker

उत्तर

13

यहां एक तरीका है। beforeSend कॉलबैक विकल्प आपको jqXHR ऑब्जेक्ट और AJAX सेटिंग्स ऑब्जेक्ट दोनों तक पहुंच प्रदान करता है।

आप त्रुटि के परिशिष्ट में caturl का उपयोग करने में सक्षम नहीं होंगे, क्योंकि यह त्रुटि फेंकने के अनुरोध के साथ समन्वयित नहीं होगा।

$.ajax({ 
    /* url, data ...& other opts*/ 
    beforeSend:function(jqXHR, settings){ 
     /* add url property and get value from settings (or from caturl)*/ 
     jqXHR.url= settings.url; 
    }, 
    /* error to be deprecated in jQuery 1.8 , superseded by "fail" */ 
    error: function(jqXHR, , textStatus, error){ 
     var url=jqXHR.url; 
    /* replace caturl with url in your append */ 
    $('#showdata').prepend("ERROR : '" + error + "' trying to access: " + url + "</br>"); 
    } 

संपादित करें: 3 पार्टी एपीआई टिप्पणी के आधार पर, यह डेटा दूरस्थ सर्वर (जो तभी संभव स्क्रिप्ट का उपयोग कर रहा है या से लिया गया है जब से $.ajax API

सीधे लिया निम्नलिखित recognze के लिए महत्वपूर्ण है jsonp डेटा प्रकार), त्रुटि कॉलबैक और वैश्विक घटनाओं को कभी नहीं निकाल दिया जाएगा।

+0

सुझाए गए कोड के लिए धन्यवाद। यह मुझे सही दिशा में इंगित करता है, और कुछ छोटे बदलावों के साथ इसे हल किया गया था। – NikG

+0

उत्सुक हूँ ... क्रॉस डोमेन कॉल है .. लेकिन आपको त्रुटि ट्रिगरिंग मिल रही है? – charlietfl

+0

हां, त्रुटियां ठीक हो रही हैं - हालांकि, मैं इस बिंदु पर स्थानीय रूप से कोड चला रहा हूं। ध्यान दें कि यह JSONP (कोई कॉलबैक फ़ंक्शन नहीं) का उपयोग नहीं कर रहा है, लेकिन कम से कम स्थानीय रूप से काम कर रहा है – NikG

0

मैं सिर्फ सर्वर से वापस यूआरएल गुजर, pseduo-PHP में है जैसे कि यह हो जाएगा सुझाव देंगे:

function function_called_by_ajax() 
{ 
    //processing... 

    echo json_encode(array('urlString'=>$urlString)); 

} 
अब आप अपने ajax सफलता में

तुम सिर्फ स्ट्रिंग प्राप्त कर सकते हैं, कुछ इस छद्म जेएस की तरह:

success: function (result) { 
    var caturl = result.urlString; 
    // Success: store the object into catalog array 
    cat.unshift(result); 
    $('#showdata').prepend("Loaded: " + caturl + "</br>"); 
} 
+0

सर्वर से वापस यूआरएल पास करने के लिए कठिन है जब एजेक्स विफल रहता है और ओपी त्रुटि url – charlietfl

+0

मेरा नियंत्रण नहीं है सर्वर पर और सर्वर से वापस यूआरएल गुजर रहा है। मैं एक तृतीय पक्ष JSON एपीआई से पढ़ रहा हूँ। – NikG

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