2013-04-24 12 views
8

मेरे पास एक ऐसा फ़ंक्शन है जो किसी भी एंकर के लिए अजाक्स अनुरोध करता है। अनुरोध विधि प्राप्त या पोस्ट किया जा सकता है। इस मामले में, मैं एक फॉर्म का उपयोग किए बिना एक पोस्ट बनाना चाहता हूं लेकिन अजाक्स अनुरोध अनुरोध भेजने से पहले एक त्रुटि फेंकता है। त्रुटि में मान "त्रुटि" है और सभी त्रुटि/विफलता वर्णन चर "" हैं।JQuery अजाक्स POST अनुरोध किए बिना एक खाली त्रुटि फेंकने

function loadPage(url,elem_id,method,data) { 
    ajaxLoading(elem_id); 
    $.ajax({ 
     type: method, 
     url: url, 
     data: data, 
     success:function(data){ 
      $("#"+elem_id).html(data);; 
     }, 
     error:function(request,textStatus,error){ 
      alert(error); 
     } 
    }); 
} 

पैरामीटर जब समारोह कहा जाता है इन (जे एस कंसोल से नकल) कर रहे हैं:

data: "partial=yes" 
elem_id: "page" 
method: "post" 
url: "/projects/2/follow" 

के रूप में पूछा, यहाँ कोड loadPage फ़ंक्शन को कॉल है।

$("body").on("click","a.ajax",function(event) { 
    var _elem = getDataElem($(this)); 
    var _method = getRequestMethod($(this)); 
    var _partial = getRequestPartial($(this)); 
    handlers.do_request(event,$(this).attr("href"),_elem, _method, _partial); 
}); 

var handlers = (function() { 
    var obj = {}; 
    obj.do_request = function(event,url,elem_id,method,data) { 
     event.preventDefault(); 

     loadPage(url,elem_id,method,data); 
     history.pushState({selector:elem_id,method:method,data:data},null,url); 
    }; 
}()); 

अजाक्स अनुरोध की विफलता के बाद, अनुरोध डिफ़ॉल्ट रूप से किया जाता है और यह अनुरोधों का जवाब देता है। मैंने जो कुछ पढ़ा है, वह एक POST अनुरोध करने के लिए एक वैध तरीका प्रतीत होता है (जिसे किसी फ़ॉर्म की आवश्यकता नहीं है)।

क्या मैं समारोह में कुछ गलत कर रहा हूं? त्रुटि जानकारी खाली क्यों है?

धन्यवाद

संपादित करें:

मैं एक "फार्म" है कि काम करता है कार्य करते है, जब चर "डाटा" serialize समारोह के साथ किया जाता से सोच कर दिया गया है, एक पद के लिए (उदाहरण के लिए "var डेटा = $ (this) .serialize(); ")। क्या यह हो सकता है कि जब मैं "फॉर्म" के बिना पोस्ट करता हूं तो "डेटा" का प्रारूप किसी भी समय गलत है? हो सकता है कि JQuery अजाक्स फ़ंक्शन एक पोस्ट स्ट्रिंग के दौरान "आंशिक = हां" जैसे डेटा के रूप में एक साधारण स्ट्रिंग को स्वीकार नहीं करता है। इस पर कोई विचार?

+0

क्या आप कह रहे हैं कि अनुरोध और टेक्स्टस्टैटस चर खाली हैं –

+0

क्या 'पोस्ट' पूंजीकृत होना चाहिए? यह दस्तावेज़ों में है। –

+0

क्या आप कोड लोड कर सकते हैं यह दिखाते हुए कि आप 'loadPage' को कैसे कॉल कर रहे हैं? – 1337holiday

उत्तर

0

समस्या को हल नहीं किया जा सका, न ही यह कारण हो सकता है कि यह क्यों हो रहा था। हालांकि, मुझे विधि 'POST' के साथ एक एंकर के बजाय एक छिपे हुए खाली फॉर्म का उपयोग करके चारों ओर एक रास्ता मिला। एक रूप के लिए, समारोह अच्छी तरह से काम किया।

जवाब

-1

बस एक अनुमान है, लेकिन docs में टाइप पैरामीटर सभी कैप्स में है, यानी 'POST' और 'post' नहीं।

+0

दोनों काम नहीं करना चाहिए? मुझे नहीं लगता कि – 1337holiday

+0

मायने रखता है मैंने 'पोस्ट' और 'पोस्ट' के साथ प्रयास किया और कोई फर्क नहीं पड़ता – JPHorta

+1

जावास्क्रिप्ट केस संवेदनशील है, इसलिए दोनों को जरूरी काम नहीं करना चाहिए। मैंने jQuery स्रोत (https://github.com/jquery/jquery/blob/master/src/ajax.js#L455) की जांच की है, और ऐसा लगता है कि वे टाइप पैरामीटर को अपरकेस में कनवर्ट करते हैं, इसलिए मुझे लगता है कि यह नहीं है मामला। –

0

प्रयास करें:

function loadPage(url,elem_id,method,dat) { 
    ajaxLoading(elem_id); 
    $.ajax({ 
     type: method, 
     url: url, 
     data: dat, 
     success:function(data){ 
      $("#"+elem_id).html(data);; 
     }, 
     error:function(request,textStatus,error){ 
      alert(error); 
     } 
    }); 
} 

मैं सोच रहा हूँ अगर आप एक कीवर्ड के नाम पर एक चर का उपयोग कर एक समस्या में चल रहे हैं। यदि यह काम नहीं करता है, तो लोड पेज को बिना किसी तर्क के कॉल करने का प्रयास करें और अपने सभी AJAX पैरामीटर को हार्ड कोडिंग करें, यह देखने के लिए कि क्या यह काम करता है।

+0

अब कोशिश की, कोई सफलता नहीं। अभी भी अनुरोध भेजने के बिना एक त्रुटि फेंक रहा है। हालांकि उत्तर के लिए धन्यवाद। – JPHorta

2

के लिए धन्यवाद मैं सिर्फ इस समस्या का सामना करना और एक या दो घंटे, सोचा के बाद गलत पर कैश सेट करने का प्रयास करने के लिए। उसने मेरे लिए इसे हल कर दिया।

$.ajax({ 
    url: url, 
    cache: false, 
    type: method 
}); 

दुर्भाग्य से, जब मैंने फिर से कैश हटा दिया, तो मेरा अनुरोध इस तरह काम कर रहा था जैसे कि उसे कोई समस्या नहीं थी। ऐसा लगता है कि सेटिंग cache:false ने कुछ 'क्लिक' किया है।

ओह ठीक है।

+0

यदि आप जिस डेटा को पुनर्प्राप्त करने का प्रयास कर रहे हैं (जिसे 'GET' मानते हैं, हालांकि प्रश्न' POST' के बारे में है) तो सर्वर जवाब को कैशिंग के लिए अनुमति नहीं देनी चाहिए। फिर 'कैश: झूठी' की आवश्यकता नहीं होनी चाहिए। –

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