2009-01-05 14 views
6

मैं पूरी तरह से उलझन में हूं कि jQuery के साथ AJAX सामान कैसे करें और ऐसा लगता है कि मैं जितना अधिक भ्रमित हूं, उतना ही मुझे लगता है। इस बिंदु पर मैं बस इतना करना चाहता हूं कि jQuery एजेक्स का उपयोग करके मेरे नियंत्रक को डेटा प्राप्त करें। मेरे jquery AJAX कॉल के लिए कुछ कोड है।एएसपी.नेट एमवीसी और JQuery नियंत्रक को जानकारी प्राप्त करें

$(function() { 
    $('#buttonAddLink').click(function() { 
     var AjaxLink = { 
      title: $("#linkTitle").val(), 
      url: $("#linkUrl").val() 
     }; 

     $.ajax({ 
      url: '/User/AddLink', 
      type: 'POST', 
      data: AjaxLink, 
      dataType: 'json', 
      success: function(result){ 
       $('.added').html(result.Result).show(); 
      } 
     });   
    });  
}); 

यहां मेरा नियंत्रक और क्रिया है जिसका उपयोग मैं कर रहा हूं। कई ट्यूटोरियल्स को देखने की कोशिश करने से इसे "मेरे" सर्वोत्तम ज्ञान के लिए काम करना चाहिए, लेकिन जाहिर है, मुझे ऐसा नहीं लगता जैसे मैंने सोचा था कि मैंने किया था।

public ActionResult AddLink(string title, string url) 
{ 
    return Json(new { Result = string.Format(title + " " + url)}); 
} 

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

उत्तर

3

इसे आपके अनुरोध की संरचना के तरीके से करना होगा। आपका JQuery कॉल उपयोगकर्ता नियंत्रक पर एडलंक एक्शन में डेटा को POST डेटा के रूप में भेज रहा है, जिसका अर्थ है आपके सी # कोड में, आप इसे Request.Form ऑब्जेक्ट के माध्यम से एक्सेस करेंगे। तुम क्या करने की कोशिश कर रहे हैं के साथ, आप के रूप में

/User/AddLink/{Title}/{URL} 

यह आप की आवश्यकता अपने Global.asax फ़ाइल में एक नियम है कि इनपुट की इस प्रकार की संभाला लिखने के लिए होगा jQuery यूआरएल संरचना चाहते हैं। संक्षेप में, यदि आप अपनी एडलिंक विधि को निम्नानुसार संशोधित करते हैं:

public ActionResult AddLink() 
{ 
    return Json(new { Result = string.Format(Request.Form["title"] + " " + Request.Form["url"])}); 
} 

मुझे विश्वास है कि आपको वह प्रतिक्रिया मिल जाएगी जो आप खोज रहे हैं।

+0

आप * अनुरोध * फॉर्म का उपयोग कर इसे एक्सेस कर सकते हैं, हालांकि एएसपी.नेट एमवीसी फ्रेमवर्क फॉर्म वैल्यू को पैरामीटर भी करेगा यदि यह कर सकता है (हालांकि यह थोड़ा उलझन में आता है यदि यूआरएल पैराम और फॉर्म में वही मान देखा जाता है) । –

1

क्या आपने पूरा यूआरएल लिखने की कोशिश की है? मेरे पास एक स्थानीय परियोजना आईआईएस पर चल रही एक परियोजना थी जिसमें एक ही समस्या थी। पूर्ण यूआरएल http://localhost/myproject/user/addlink था, लेकिन jQuery AJAX कॉल में "/ user/addlink" का उपयोग http://localhost/user/addlink पर सबमिट कर रहा था (ध्यान दें कि "myproject" गायब है क्योंकि यह वास्तव में jQuery यूआरएल के आधार पर मूल यूआरएल नहीं है)।

0

आप jQuery.post विधि कुछ

तरह
jQuery.post("/User/AddLink",AjaxLink,function(data,textStatus) 
{ 
    if(textStatus=="success") 
    { 
    //do something with data which is the result from the call} 
    } 
    else 
    { 
    //failed somewhere along the line 
    } 
},"json"); 

पद मूल्यों MVC कॉल में मानकों पर मैप किए जाते होना चाहिए का उपयोग कर तो foxxtrot के कोड अनावश्यक होना चाहिए की कोशिश की है।

+0

क्या आपने फ़ायरबग का उपयोग किया है यह जांचने के लिए कि कौन सा डेटा भेजा जा रहा है? क्या कार्रवाई कहा जा रहा है (जो रूटिंग समस्या से संबंधित होगा)? – buildmaster

1

यह सुनिश्चित करने के लिए फ़ायरबग जैसे टूल का उपयोग करें कि आप जिस यूआरएल की अपेक्षा करते हैं उसे कॉल किया जा रहा है।

दिनचर्या =>

  1. उपयोग Firbug डिबगिंग निर्धारित करने के लिए है कि सही यूआरएल बुलाया जा रहा है और सही डेटा पोस्ट में भेजा जा रहा है
  2. कार्रवाई में कॉल तोड़ और यह सुनिश्चित करें मापदंडों कर रहे हैं
  3. फिर से प्रतिक्रिया

आईई डेवलपर टूलबार भी Firebug के बजाय इस्तेमाल किया जा सकता है, तो आप IE पसंद करते हैं जाँच करने के लिए डाला जा रहा सही ढंग से

  • उपयोग Firebug। यदि कॉल यूआरएल और पोस्ट डेटा सही लगता है, और कार्रवाई नहीं कहा जा रहा है तो आपको अपने रूटिंग नियमों की जांच करनी चाहिए। यानी क्या इसमें कोई डिफ़ॉल्ट मान है, जिस स्थिति में एमवीसी ढांचा एक विधि हस्ताक्षर की तलाश करेगा जिसमें उन डिफ़ॉल्ट मान होते हैं (क्या आपके पास आपके यूआरएल नियम में {id} है?)

  • 0

    मैंने अभी तक इसका परीक्षण करने के लिए समय नहीं लिया है, लेकिन ऐसा लगता है कि इसे काम करना चाहिए, मुझे लगता है कि मैं यह सुनिश्चित कर दूंगा कि आप नियंत्रक फ़ंक्शन को सजाने के लिए यह बताएं कि यह एक पोस्ट की तलाश में है निम्नलिखित:

    [HttpPost] 
    public ActionResult AddLink() 
    { 
        return Json(new { Result = string.Format(Request.Form["title"] + " " +  Request.Form["url"])}); 
    } 
    

    यदि आपके पास इनमें से कोई भी समाधान आपके लिए काम नहीं करता है तो मुझे आज दोपहर इसका परीक्षण करने का समय होना चाहिए।

    2

    ठीक है, अजाक्स का उपयोग कर अपने कार्रवाई विधि को डेटा पास के लिए इस कोड का प्रयास करें:

    jQuery.ajax({ 
          url: '@Url.Action("AddLink", "User")', 
          type: 'POST', 
          contentType: 'application/json', 
          data: JSON.stringify({ title: title, url: url }), 
          success: function (result) { } 
         }); 
    
    +0

    आप केवल उसी कोड स्निपेट को पोस्ट करते हुए प्रत्येक एमवीसी/AJAX प्रश्न के उत्तर के रूप में पोस्ट करते रहें। यह वास्तव में यहां सहायक नहीं है। -1 –

    0

    तो मैं यह पता लगाने की डेटा एक AJAX कॉल से वापस पाने के लिए कैसे की कोशिश कर रहा एक समय का एक छोटा सा होने गया था। मैं दृश्य से JSON ऑब्जेक्ट को नियंत्रक में पास कर रहा था, और उसके बाद ऑब्जेक्ट की आईडी वापस कर देता था।

    तो, मैं अंत में है कि काम कर रहे है, और यहाँ है कि मैं क्या दृश्य पर किया था है:

    var obj = { 
        property1 : '', 
        property2 : '' 
    }; 
    
    $.ajax({ 
        // Returns the full url 
        url: '@Url.Action("Method", "Controller")', 
        // Sends as a json object, I actually have an object that maps to my ViewModel, this is just for explaining 
        data: obj, 
        // You are telling that you are receiving a json object 
        dataType: 'json', 
        success: function (id) { 
         // do code here with id 
        } 
    }) 
    

    मेरी नियंत्रक के लिए, मैं एक JSON ऑब्जेक्ट लौट आए और एक AllowGet एक JsonRequestBehavior

    public ActionResult Method (ViewModel vm) 
    { 
        int id = ... (do something with the vm) 
        return Json(id, JsonRequestBehavior.AllowGet); 
    } 
    
    के रूप में किया था

    संपादित करें: इसके अतिरिक्त, ऐसा लगता है कि आपके पास नियंत्रक के अनुरोध के प्रकार के रूप में POST है, और आपके नियंत्रक विधि में [HttpPost] एनोटेशन नहीं है। यह भी मामला हो सकता है।

    मुझे आशा है कि इससे मदद मिलती है!
    चीयर्स!

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