2012-06-13 7 views
9

यह एक एमवीसी 3 ऐप नहीं है। मैं अपने कार्रवाई करने के लिए निम्न JavaScript कॉल है:एमवीसी एक्शन पर JQuery AJAX कॉल हमेशा एक त्रुटि देता है जब कोई

function editDescription(docId,fileName, fileDescription) { 
    $.ajax({ 
     type: "POST", 
     url: "/OrderDetail/LoadModelData", 
     contentType: "application/json; charset=utf-8", 
     data: "{'id': '"+docId +"', 'filename': '"+fileName+"', 'description': '"+fileDescription+"'}", 
     dataType: "json", 
     success: function (result) { 
     alert("ok: "+ result.d); 
     }, 
     error: function (result) { 
      alert('Oh no: '+ result.responseText); 
     } 
    }); 

यहाँ मेरा कार्रवाई:

[HttpPost] 
    public string LoadModelData(string id, string filename, string description) 
    { 
     return filename; 
    } 

मैं कोड चलाने के लिए, कार्रवाई मानकों के साथ बुलाया जाता है, कुछ भी नहीं रिक्त है, लेकिन त्रुटि समारोह हो जाता है हर बार बुलाया जाता है। तो इसमें 'ओह नो' वाला अलर्ट बॉक्स हर बार दिखाई देता है, लेकिन कार्रवाई से वापस आने वाली स्ट्रिंग सही है। यदि फ़ाइल नाम test.pdf त्रुटि चेतावनी बॉक्स कहते हैं

'Oh No: test.pdf'. 

है मैं Firebug में देखा और कोई त्रुटि नहीं है। इस तथ्य के बावजूद सफलता कार्य क्यों नहीं कहा जा रहा है कि कोई त्रुटि नहीं है?

+0

फ़ाइल नाम। जो कुछ करना चाहिए वह कर रहा है। त्रुटि फ़ंक्शन कॉलिंग जारी रहता है और जल्द ही या बाद में एक वास्तविक त्रुटि – BoundForGlory

उत्तर

11

आप अपनी क्रिया विधि से string मूल्य (वापसी) की उम्मीद कर रहे हैं। आपको डेटाटाइप को json के रूप में निर्दिष्ट करने की आवश्यकता क्यों है? इसे हटाएं और देखें कि क्या होता है। और प्रतिक्रिया से डी संपत्ति नहीं है! तो बस चेतावनी में परिणाम का उपयोग करें।

$.ajax({ 
     type: "POST", 
     url: "/OrderDetail/LoadModelData", 
     contentType:"application/json; charset=utf-8",   
     data: JSON.stringify({ 
          id: docId, 
          filename: fileName, 
          description: fileDescription 
          }), 
     success: function (result) { 
     alert("ok: "+ result); 
     }, 
     error: function (result) { 
      alert('Oh no: '+ result.responseText); 
     } 
    }); 

datatype संपत्ति सर्वर है कि किस तरह की सामग्री ग्राहक वापस परिणाम के रूप में की उम्मीद है बताता है।

संपादित करें: जैसा कि डारिन ने उल्लेख किया है, कृपया JSON अनुरोध बनाने के लिए JSON.stringify विधि का उपयोग करें। भविष्य के आगंतुकों के लिए सही तरीका शामिल करने के लिए इस उत्तर को अपडेट करना।

+0

होती है जो यह थी ... बहुत बहुत धन्यवाद – BoundForGlory

+0

@ user1202717: आपका स्वागत है। मैं खुशी से मदद कर सकता है। AJAX अनुरोध में हार्डकोडेड JSON स्ट्रिंग को छोड़ने के लिए – Shyju

+1

-1। –

8

कभी स्ट्रिंग जोड़तोड़ के साथ JSON का निर्माण:

data: "{'id': '"+docId +"', 'filename': '"+fileName+"', 'description': '"+fileDescription+"'}", 

कि बिल्कुल भयानक और गलत है। आप कुछ भी एन्कोडिंग नहीं कर रहे हैं। description में उद्धरण प्राप्त करें और सबकुछ टूट जाएगा।

$.ajax({ 
    type: "POST", 
    url: "/OrderDetail/LoadModelData", 
    contentType: "application/json; charset=utf-8", 
    data: JSON.stringify({ 
     id: docId, 
     filename: fileName, 
     description: fileDescription 
    }), 
    success: function (result) { 
     alert("ok: "+ result.filename); 
    }, 
    error: function (result) { 
     alert('Oh no: '+ result.responseText); 
    } 
}); 

JSON.stringify विधि मूल रूप से निर्मित आधुनिक ब्राउज़रों जाता है: जब JSON

इस तरह

से छेड़छाड़ हमेशा एक JSON पार्सर का उपयोग करें। यदि आपको विरासत ब्राउज़र का समर्थन करने की आवश्यकता है तो आप json2.js स्क्रिप्ट

एक और गलती आपके नियंत्रक कार्रवाई हस्ताक्षर शामिल कर सकते हैं। एएसपी.नेट एमवीसी नियंत्रक कार्यों में एक्शन रिसेट्स को वापस करना होगा, स्ट्रिंग नहीं:

[HttpPost] 
public ActionResult LoadModelData(string id, string filename, string description) 
{ 
    return Json(new { filename = filename }); 
} 
+0

जेसनआरसल्ट के बारे में क्या लौटा? – PositiveGuy

+0

@CoffeeAddict, इसके बारे में क्या? –

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