2009-06-17 29 views
7

मेरे एएसपी.नेट एमवीसी प्रोजेक्ट में JQuery कॉल का उपयोग करते समय मुझे एक अजीब समस्या है। मैंने पाया कि अजाक्स कॉल 404 देता है (संसाधन त्रुटि नहीं मिली)। लेकिन जब मैं सामान्य यूआरएल जीईटी कॉल का उपयोग करता हूं, तो मैं बिना किसी समस्या के सर्वर को सफलतापूर्वक कॉल कर सकता हूं। कोई विचार क्यों ऐसा है?JQuery अजाक्स कॉल 404 'संसाधन नहीं मिला' त्रुटि देता है लेकिन सामान्य यूआरएल कॉल ठीक है

यह मेरा ASP.NET MVC कोड

public class ViewRecordController: Controller 
{ 
    public JSONResult GetSoftwareChoice(string username) 
    { 
    return Json(username); 
    } 
} 

यह मेरा JQuery कोड है: JQuery ऊपर

$(function() { 
$("#username").click(function() { 
     $.getJSON("ViewRecord/GetSoftwareChoice", {username:'123'}, 
    function(data) { 
     alert(data); 
    }); 
    }); 
}); 

मुझे एक 404 त्रुटि देता है। स्पष्ट रूप से ViewRecord/GetSoftwareChoice सर्वर पर नहीं मिला है, जहां तक ​​AJAX कॉल का संबंध है।

लेकिन अगर मैं अपने वेब ब्राउज़र में इस टाइप करें:

http://myapp/ViewRecord/GetSoftwareChoice?username=123 

तो कोई समस्या नहीं है।

यह वास्तव में बहुत अजीब है।

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Default",            // Route name 
     "{controller}/{action}/{id}",       // URL with parameters 
     new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
    ); 

} 

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

शायद ज़रुरत पड़े यदि आप रुचि रखते हैं, यह मेरा मार्ग है मैं अपने कोड में कदम, और पाया कि यूआरएल कॉल ViewRecord/GetSoftwareChoice?username=123 है।

संबंधित प्रश्न: Select Element inside Form not working in JQuery

उत्तर

4

मैं FireBug का उपयोग करके मुझे अनुरोध है कि JQuery द्वारा उत्पन्न की गई दिखाने के लिए इस समस्या को ठीक।मेरे विस्मय करने के लिए, उत्पन्न यूआरएल JSON कॉल के लिए

http://localhost/ViewRecord/ViewRecord/GetSoftwareChoice?username=123 

है:

$(function() { 
$("#username").click(function() { 
     $.getJSON("ViewRecord/GetSoftwareChoice", {username:'123'}, 
    function(data) { 
     alert(data); 
    }); 
    }); 
}); 

तो मैं सिर्फ वैकल्पिक रूप से

$.getJSON("GetSoftwareChoice", {username:'123'}, 

को $.getJSON लाइन बदलने के लिए, फ़ॉरवर्ड स्लैश का उपयोग करना :

$.getJSON("/ViewRecord/GetSoftwareChoice", {username:'123'}, 
+2

.... या "/ ViewRecord/GetSoftwareChoice" पर। अग्रणी स्लैश का अर्थ एक पूर्ण पथ है, भले ही आप होस्टनाम – Javier

+0

धन्यवाद, जेवियर शामिल न करें। मैंने आपके जवाब में आपकी प्रतिक्रिया शामिल की। – Graviton

+0

मुझे लगता है कि जोहनी जी (और टिप्पणियों में जारोड) पहले ही इस जवाब को निहित करता है। – Charlino

8

के बजाय हार्ड-कोड यूआरएल, आप एक UrlHelper करके देख सकते हैं:

$(function() { 
    $("#username").click(function() { 
     var url = '<%= UrlHelper.Action("GetSoftwareChoice", "ViewRecord") %>'; 
     $.getJSON(url, {username: '123'}, function(data) { 
      alert(data); 
     }); 
    }); 
}); 
+0

बिल्कुल - मुझे लगता है कि यह भी रूट रूट के बजाय, jQuery fetch url वर्तमान पथ से संबंधित होने का एक मुद्दा है। –

+1

इसके अलावा, फ़ायरबग का उपयोग करने के लिए +1 और हमें फायरबग कंसोल परिणाम दिखा रहा है। –

+0

मुझे नहीं लगता कि UrlHelper जावास्क्रिप्ट में काम करता है (मैंने इसका परीक्षण किया है) ... क्या आप वाकई काम करते हैं? – Graviton

1

उपयोग फ़ायरफ़ॉक्स Firebug पर जोड़ने के लिए, और घड़ी क्या अनुरोध JQuery के द्वारा बनाई गई हो जाता है। ..

क्या यह संभव है कि पेज है कि इस Jquery में चलाता है एक उपनिर्देशिका में है, ऐसी स्थिति में अनुरोध http://myapp/ यूआरएल है "में टाइप" के रूप में रिश्तेदार जड़ नहीं होगा?

इसके अलावा, मैं अनुमान लगा रहा हूं कि आपने ऊपर निर्दिष्ट कोड वास्तव में वह कोड नहीं है जिसका उपयोग आप कर रहे हैं (जो पूरी तरह से उचित है, मैं रैडली कोड को जैसा है)। क्योंकि

$.getJSON("ViewRecord/GetSoftwareChoice", {username='123'}, 

= उपयोगकर्ता नाम और '123' के बीच चिह्न अमान्य जेएस है जहां तक ​​मुझे पता है। इसलिए मैं शर्त लगा रहा हूं कि वास्तविक कोड में कुछ मूर्खतापूर्ण जानकारी है जो समस्या पैदा कर रही है।

+0

मैं एएसपी.नेट एमवीसी का उपयोग कर रहा हूं, इसलिए अनुरोध की कोई समस्या नहीं है क्योंकि http: // myapp/"टाइप किया गया" यूआरएल है। – Graviton

+0

मैं एएसपी का भी उपयोग कर रहा हूं।नेट एमवीसी और मूल रूप से मेरा एजेक्स पथ "/ कंट्रोलर/एक्शन" के रूप में सेट किया गया था, लेकिन इस जवाब के कारण और आगे बढ़ने के बारे में ग्रेविटन के अपने उत्तर पर @ जेवियर की टिप्पणी एक पूर्ण पथ होने के नाते, मुझे पता चला कि यह एक सापेक्ष पथ नहीं था ऐप को सर्वर पर धकेल दिया गया था जो ऐप को दो उपनिर्देशिका परतों में दफन करता है जो मेरे स्थानीय पर्यावरण से अलग है। मेरे लिए सही समाधान एक पूरी तरह से सापेक्ष पथ होना था जिसमें नियंत्रक और क्रिया जैसे var url = "नियंत्रक/क्रिया" शामिल था; –

1

को कोलन से बराबर के चिह्न बदलें:

$(function() { 
$("#username").click(function() { 
     $.getJSON("ViewRecord/GetSoftwareChoice", {username:'123'}, 
    function(data) { 
     alert(data); 
    }); 
    }); 
}); 
+0

क्षमा करें! यह मेरे प्रश्न में एक टाइपो है। मैं अपने कोड में {उपयोगकर्ता नाम: '123'} का उपयोग कर रहा हूं लेकिन गलती से टाइप किया गया {username = '123'} – Graviton

4
$(function() { 
    $("#username").click(function() { 
     $.getJSON('<%= Url.Action("GetSoftwareChoice", "ViewRecord")%>',{username: '123'}, function(data) { 
      alert(data); 
     }); 
    }); 
}); 
0

मुझे भी यही समस्या थी। ग्रेविटन के रूप में फायरबग का उपयोग करने के बाद, मैंने देखा कि मेरा रास्ता जीत गया था इसलिए मैंने इसे अपनी क्रिया के नाम पर बदल दिया। Get_OrderLine मेरे नियंत्रक में मेरी कार्रवाई का नाम है। inv_item_id नियंत्रक कार्रवाई को पारित पैरामीटर है।

// Update OrderLine data by returning a JSON result 
$('#itemsddl').click(function (e) { 
    var selectedItem = $(this).val(); 
    var actionURL = "Get_OrderLine"; 
    var d = "inv_item_id=" + selectedItem; 
    var uom = $('#uom'); 
    var size = $('#size'); 
    var unitLbs = $('#unitLbs'); 
    var totalLbs = $('#totalLbs'); 
    var shipName = $('#shipName'); 
    var hazardClass = $('#hazardClass'); 
    var unnaNo = $('#unnaNo'); 
    var packingGroup = $('#packingGroup'); 
    var placard = $('#placard'); 
    var ergNo = $('#ergNo'); 
    $.ajax({ 
     cache: false, 
     type: 'GET', 
     url: actionURL, 
     data: d, 
     datatype: JSON, 
     success: function (data) { 
      uom.val(data.uom); 
      size.val(data.size); 
      unitLbs.val(data.unitLbs); 
      totalLbs.val(data.totalLbs); 
      shipName.val(data.shipName); 
      hazardClass.val(data.hazardClass); 
      unnaNo.val(data.unnaNo); 
      packingGroup.val(data.packingGroup); 
      placard.val(data.placard); 
      ergNo.val(data.ergNo); 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
      alert('Failed to query item - ' + thrownError + "\n" + "Full details: " + xhr.responseText); 
     } 
    }); 
    e.preventDefault(); 
}); 

यह मेरी क्रिया है जो मेरे jQuery पर JSON परिणाम देता है। JQuery फ़ंक्शन तब JSON से HTML पर मैपिंग को संभालता है। बहुत सुंदर नहीं है, लेकिन यह काम करता है।

public ActionResult Get_OrderLine(int? inv_item_id) 
{ 
    HazmatInfoItem item = new HazmatInfoItem(); 
    item.itemId = "0"; 
    item.size = "0"; 
    item.unitLbs = 0; 
    item.qty = 0; 
    item.totalLbs = item.qty * item.unitLbs; 
    item.shipName = ""; 
    item.hazardClass = ""; 
    item.unnaNo = ""; 
    item.packingGroup = ""; 
    item.placard = ""; 
    item.ergNo = ""; 

    var items = from i in hazmatRepository.GetAllItems() 
       select i; 

    // Get item details 
    items = items.Where(i => i.INV_ITEM_ID.Contains(inv_item_id.ToString())); 

    foreach (var i in items) 
    { 
     item.uom = i.UNIT_MEASURE_STD; 
     item.size = i.INV_ITEM_SIZE; 
     item.unitLbs = 1; 
     item.totalLbs = item.unitLbs * item.qty; 
     item.shipName = i.PAG_SHIPPING_NAME; 
     item.hazardClass = i.HAZ_CLASS_CD; 
     item.unnaNo = i.MSDS_ID; 
     item.packingGroup = i.PACKING_CD; 
     item.placard = i.PAG_PLACARD_TYPE; 
    } 

    return Json(item, JsonRequestBehavior.AllowGet); 
} 

मैं मूल रूप से इस संभाल करने के लिए प्रयास करने के लिए एक नया मार्ग जोड़ा था, लेकिन यह टिप्पणी की डिफ़ॉल्ट रूटिंग अनुमति देने के लिए।

उम्मीद है कि ये समाधान किसी और की मदद कर सकते हैं जिसकी उपयोग करने का प्रयास करते समय समान समस्या है। JQuery और एमवीसी के साथ अजाक्स।

+0

स्टैक ओवरफ़्लो में आपका स्वागत है! उपयोगी उत्तर के प्रारूप को देखने के लिए कृपया stackoverflow.com/about पर एक नज़र डालें! यहां कोड बिट्स बहुत लंबे हैं और किसी के द्वारा पढ़ने की संभावना नहीं है (विशेष रूप से वहां कितने अन्य उत्तर हैं)। यदि आप भविष्य में आने वाले किसी व्यक्ति की मदद करना चाहते हैं, तो अपने कोड से ~ 5-10 लाइनों पर अपने कोड बिट्स को छोटा करने पर विचार करें जो वास्तव में इस समस्या को हल करते हैं! – arturomp

0

पुरानी समारोह:

function Chart() { 

    var url = "../Home/Pie/"; 
    $.ajax({ 
     url: url, 
     data: {}, 
     cache: false, 
     type: "POST", 
     success: function (data) { 
      var chartData = data; 
      createChart(chartData); 
      $(document).bind("kendo:skinChange", createChart); 
     }, 
     error: function (xhr, status, error) { 
      $('#alertdialog').html(status); 
      $('#alertdialog').dialog('open'); 
      return false; 
     } 
    }); 
} 

उत्तर: वर url = "घर/पाई/"; हटाया गया ../ url से

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