मैं एएसपी.NET एमवीसी का उपयोग कर रहा हूं, लेकिन यह किसी भी ढांचे पर लागू होता है।jQuery AJAX और विभिन्न डेटा हैंडलिंग
मैं अपने सर्वर पर एक अजाक्स कॉल कर रहा हूं, जो ज्यादातर समय सादा पुराना HTML देता है, हालांकि अगर कोई त्रुटि है, तो मैं इसे एक स्टेटस संदेश के साथ JSON ऑब्जेक्ट वापस करना चाहता हूं (और कुछ अन्य बातें)। इस कुएं को संभालने के लिए jQuery कॉल में dataType
विकल्प का कोई तरीका नहीं दिखता है। डिफ़ॉल्ट रूप से यह सबकुछ HTML के रूप में पार्स करने लगता है, जिससे <div>
"{ status: 'error', message: 'something bad happened'}"
के साथ पॉप्युलेट हो रहा है।
[संपादित करें] dataType
ऑब्जेक्ट को अनदेखा करना और jQuery चित्र को बाहर निकालना या तो काम नहीं करता है। यह परिणाम के प्रकार को string
के रूप में देखता है और इसे HTML के रूप में मानता है।
एक समाधान जो मैं आया था, परिणाम वस्तु को जेएसओएन के रूप में पार्स करने का प्रयास करना है। अगर यह काम करता है तो हम जानते हैं कि यह एक JSON ऑब्जेक्ट है। यह एक अपवाद फेंकता है, यह एचटीएमएल है:
$.ajax({
data: {},
success: function(data, textStatus) {
try {
var errorObj = JSON.parse(data);
handleError(errorObj);
} catch(ex) {
$('#results').html(data);
}
},
dataType: 'html', // sometimes it is 'json' :-/
url: '/home/AjaxTest',
type: 'POST'
});
हालांकि, कि रास्ते में एक अपवाद का उपयोग कर के रूप में मुझे बहुत बुरा डिजाइन (और कम से कम कहने के लिए unintuitive) बनाता है। क्या कोई बेहतर तरीका है? मैंने एक JSON ऑब्जेक्ट में पूरी प्रतिक्रिया लपेटने के बारे में सोचा, लेकिन इस परिस्थिति में, मुझे नहीं लगता कि यह एक विकल्प है।
// ASP.NET MVC Action:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AjaxTest(int magic) {
try {
var someVal = GetValue();
return PartialView("DataPage", someVal);
} catch (Exception ex) {
this.HttpContext.Response.StatusCode = 500;
return Json(new { status = "Error", message = ex.Message });
}
}
// jQuery call:
$.ajax({
data: {},
success: function(data, textStatus) {
$('#results').html(data);
},
error: function() {
var errorObj = JSON.parse(XMLHttpRequest.responseText);
handleError(errorObj);
},
dataType: 'html',
url: '/home/AjaxTest',
type: 'POST'
});
हममम, दिलचस्प स्थिति है, लेकिन मैं एक विधि होने अगर विभिन्न प्रकार वापसी पता नहीं है सबसे अच्छा विचार है - हो सकता है आप पहली विधि एक bool वापसी होनी चाहिए, और फिर $ .ajax कॉलबैक में आप कर सकते हैं एक और तरीका कॉल करें जो स्टेटस संदेश वापस कर देगा। –