2012-11-16 11 views
5

से लंबे समय तक WinForm प्रोग्रामर से वेब प्रोग्रामिंग दृश्य पर नया नहीं कहा जाता है। मेरे पास विजुअल स्टूडियो 2010 है और मैंने एक नई वेबसाइट बनाई है। मुझे लगता है कि मैंने बनाया एक वेबमाइंड कॉल करने के लिए AJAX प्राप्त नहीं कर सकता। जब मैं पृष्ठ पर अपने बटन पर क्लिक करता हूं तो कुछ भी नहीं होता है।जावा विधि को जावास्क्रिप्ट फ़ंक्शन

ऐसा लगता है कि जब मैं वेबसाइट प्रोजेक्ट बनाता हूं तो jquery 1.4.1 स्वचालित रूप से स्क्रिप्ट फ़ोल्डर में जोड़ा जाता है।

Default.aspx में मैं 2 स्क्रिप्ट टैग को जोड़ने: प्रक्रिया में

<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" /> 

:

<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script> 
<script language="javascript" type="text/javascript" src="Scripts/Process.js"> 

मैं एक बटन पृष्ठ पर जहां onclick समारोह Process.js में परिभाषित किया गया है में डाल दिया।

function btnTest_onclick() { 

    var strData = JSON.stringify({ 
     userid: 5 
    }); 

    alert(strData); 

    $.ajax({ 
     url: 'Default.aspx/GetData', 
     type: "POST", 
     data: strData, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: Success, 
     failure: Failure, 
     async: true 
    }); 
} 

function Success(data) { 
    alert("success"); 
} 

function Failure(data) { 
    alert("failure"); 
} 

Default.aspx.cs में: js मैं निम्नलिखित कोड है

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    [WebMethod()] 
    public static string GetData(int id) 
    { 
     return "hello, my id is " + id; 
    } 
} 
+0

तुम्हें पता है ... आप कर सकते हैं हमेशा 'कंसोल नवीनतम स्थिर संस्करण jQuery प्राप्त करने के लिए (या UI का उपयोग भी ऐसा ही करने, या यहाँ तक कि यह स्क्रिप्ट की जगह स्वयं कर में अद्यतन-पैकेज jquery' फ़ाइल) – MilkyWayJoe

+1

भी, [$ .ajax] (http://api.jquery.com/jQuery.ajax/) में सही कॉलबैक 'त्रुटि' है और 'विफलता' नहीं है। इसे बदलें। – MilkyWayJoe

+0

1.4.1 स्थिर नहीं है? मुझे लगता है कि चूंकि एमएस स्वचालित रूप से आपके लिए इसे शामिल करता है, मुझे लगता है कि यह स्थिर होना चाहिए। यह मुझे दिखाने में काम करता है कि यह असफल रहा है, धन्यवाद। अब मुझे यह पता लगाने की जरूरत है कि यह क्यों विफल रहा है :) – user441521

उत्तर

4

मैं अगर का उपयोग कर JQuery आप के लिए आवश्यकता है अजाक्स अनुरोध करने वाले को पता नहीं है, लेकिन आप और अधिक आसानी से पृष्ठ के लिए ajax अनुरोध कर सकते हैं ASP.NET AJAX की क्षमताओं का उपयोग कर विधियां।

सबसे पहले मैं यह देखना चाहता हूं कि पेजमैड्स का उपयोग करने के लिए आपको पृष्ठ पर स्क्रिप्ट प्रबंधक नियंत्रण जोड़ने की आवश्यकता है और EnablePageMethods = "True" निर्दिष्ट करें।

जब आप ऐसा करेंगे, तो ScriptManager पेजमाइड्स क्लाइंट साइड परिभाषा प्रस्तुत करेगा जो पृष्ठ पर परिभाषित पृष्ठ विधियों की प्रॉक्सी का प्रतिनिधित्व करता है और आप अजाक्स अनुरोध का उपयोग करके आसानी से इन विधियों का आह्वान कर सकते हैं। आप इस कोड को कोड के कम लाइनों है और यह काम करता है देख सकते हैं

<asp:ScriptManager ID="ScriptManager" runat="server" EnablePartialRendering="true" EnablePageMethods="True" /> 
<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" /> 
<script type="text/javascript"> 
    function btnTest_onclick() { 

     PageMethods.GetData(5, Success, Failure); 
    } 

    function Success(data) { 
     alert("success"); 
     alert(data); 
    } 

    function Failure(data) { 
     alert("failure"); 
    } 

</script> 

:

तो, आप निम्नलिखित कोड की कोशिश कर सकते हैं।

+0

यह काम करता है! तो यह मुझे दिखाता है कि मेरा AJAX कॉल गड़बड़ है। मुझे वास्तव में यह जानना अच्छा लगेगा कि मैंने इसके साथ क्या गलत किया है। क्या आप केवल उस पृष्ठ पर परिभाषित कार्यों के लिए इसका उपयोग कर सकते हैं? उदाहरण के लिए यदि मैं एक ऐसा पृष्ठ बनाना चाहता हूं जो मूल रूप से कहीं भी उपयोग करने के लिए सामान्य कार्यों को संग्रहीत करने के लिए मौजूद है, तो क्या यह काम करेगा क्योंकि वे उस पृष्ठ के अलावा मौजूद हैं जो इसे कॉल करना चाहता है? मुझे लगता है कि एक मुख्य लाभ यह है कि मैं 'डिफ़ॉल्ट.aspx/GetData' के माध्यम से AJAX कॉल के साथ फ़ंक्शन पर मौजूद फ़ंक्शन को निर्दिष्ट कर सकता हूं। क्या मैं इसे ScriptManage और PageMethods के साथ कर सकता हूं? यदि ऐसा है तो मैं इस विधि को पसंद करता हूं। – user441521

+0

पृष्ठों के बीच कुछ कोड साझा करने के लिए यह अजाक्स सक्षम डब्ल्यूसीएफ या वेब सेवा के साथ बेहतर होगा। डिनो एस्पोजिटो का निम्नलिखित लिंक इस दृष्टिकोण का वर्णन करता है: http://dotnetslackers.com/articles/ajax/JSON-EnabledWCFServicesInASPNET35.aspx। यदि आप इस आलेख की समीक्षा करेंगे तो आप देखेंगे कि डब्ल्यूसीएफ सेवा के साथ काम करना वही होगा जैसा आप पेज विधियों के साथ काम करते हैं। नोट: आपके पास डब्ल्यूसीएफ सेवा विधियों में सत्र तक पहुंच होगी जिसने लेख में वर्णित तरीके को लागू किया है। –

+0

आप निम्न प्रश्नों के मेरे उत्तर की समीक्षा भी कर सकते हैं: http://stackoverflow.com/questions/12886991/calling-wcf-server-from-asp-net/12992569#12992569 –

1

डेटा आइटम नाम पृष्ठ विधि तर्क से मेल खाना चाहिए:

var strData = JSON.stringify({ 
       id_MATCH: 5 
      }); 

    [WebMethod()] 
    public static string GetData(int id_MATCH) 
    { 
     return "hello, my id is " + id_MATCH; 
    } 
+0

मैंने उन्हें दोनों आईडी नाम दिया और अभी भी असफल रहा। यह भी जानता है कि आईई को कैशिंग चीजों से कैसे रोकें। मैंने परिवर्तन किया, रीरन और अलर्ट() अभी भी यूजर आईडी कहा। मैंने temp इंटरनेट फ़ाइलों को हटा दिया और फिर से चलाया और फिर यह आईडी दिखाया, लेकिन यह हर समय temp इंटरनेट फ़ाइलों को हटाने के लिए परेशान है। – user441521

+1

परीक्षण के बीच विकास सर्वर को रोकने का प्रयास करें। टास्कबार में अधिसूचना आइकन पर राइट क्लिक करें और स्टॉप का चयन करें। –

+0

यह काम करता है, हालांकि temp इंटरनेट फ़ाइलों को हटाने के लिए क्लिक की संख्या के बारे में है:/ – user441521

0

नीचे अजाक्स पोस्ट और वेब विधि

<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" /> 
<script type="text/javascript" > 
function btnTest_onclick() { 

var strData = JSON.stringify({ 
    userid: 5 
}); 

alert(strData); 

$.ajax({ 
    url: 'Default.aspx/GetData', 
    type: "POST", 
    data: strData, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: Success, 
    failure: Failure, 
    async: true 
}); 
} 

function Success(data) { 
alert("success"); 
} 

function Failure(data) { 
alert("failure"); 
}</script> 

[System.Web.Services.WebMethod()] 
    public static string GetData(int userid) 
    { 
     return "hello, my id is " + userid; 
    } 

कार्रवाई करने के लिए आप कृपया ऊपर दिए गए कोड जहां $ .ajax से भेजे गए डेटा नाम webmethod में रूप में ही है की जाँच कर सके है।

धन्यवाद

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