2012-12-30 13 views
17

मेरे पास एक एएसपी.Net पृष्ठ पर निम्न jQuery AJAX कॉल है।एजेपी.Net पृष्ठ पर डेटा पोस्ट करने के लिए jQuery AJAX कॉल (प्राप्त नहीं करें लेकिन पोस्ट करें)

   $.ajax({ 
       async: true, 
       type: "POST", 
       url: "DocSummaryDataAsync.aspx", //"DocSummary.aspx/GetSummaryByProgramCount", 
       contentType: "application/json; charset=utf-8", 
       data: kendo.stringify({ vendorId: supplierId, businessUnit: busUnit, productSegmentId: prodSegmentId, programId: progId, productManagerId: prodManagerId, companyIds: compIds, expired: exp.toString(), requestType: 'TotalCount' }), 
       success: function (msg) { 
        // alert('in success of getcount'); 

       }, 
       error: function (XMLHttpRequest, textStatus, errorThrown) { 
        // alert('in failure of getcount'); 


       } 
      }); 

जब मैं अनुरोध वस्तु, पोस्ट डेटा से प्राप्त करने का प्रयास है, यह दिखाई नहीं देता। मेरा एएसपीएक्स पेज कोड नीचे जैसा है। मैं पेज पर जेसन प्रारूप में प्रत्येक पोस्ट डेटा भेज रहा हूं, फिर भी यह पेज के पीछे कोड में दिखाई नहीं देता है। क्या jQuery AJAX कॉल में कुछ अतिरिक्त सेटिंग है जो मुझे याद आ रही है?

protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.ContentType = "application/json"; 

     string requestType = Request.Params["requestType"]; 


     //populate variables from posted data 
     string vendorId = Request.Params["vendorId"]; 
     string businessUnit = Request.Params["businessUnit"]; 
     string productSegmentId = Request.Params["productSegmentId"]; 
     string commitmentProgramId = Request.Params["programId"]; 
     string productManagerId = Request.Params["productManagerId"]; 
     string companyIds = Request.Params["companyIds"]; 
     string expired = Request.Params["expired"]; 
    } 

अद्यतन 1: स्टीफन जवाब यह करने के लिए सबसे अच्छा तरीका है, खासकर दृष्टिकोण है कि ProcessRequest करता है। हालांकि, मुझे एक छोटी सी चाल मिली जो सामान्य पारंपरिक तरीके से डेटा को एएसपी.Net पर पोस्ट करने की अनुमति देगा जैसे कि अनुरोध ["विक्रेता आईडी"] आदि। किसी भी jQuery AJAX अनुरोध से डेटा की ऐसी पोस्टिंग सक्षम करने के लिए, आपको बस इसकी आवश्यकता है सुनिश्चित करें कि निम्नलिखित 2 अंक अपने jQuery ajax कॉल करने के लिए लागू किए गए हैं:

  1. सामग्री प्रकार अपने jQuery ajax कॉल से बाहर या यदि आप यह तो शामिल करना चाहते हैं यह सेट नहीं किया जाना चाहिए छोड़ दिया जाना चाहिए "एप्लिकेशन/जेसन; charset = utf-8" लेकिन "एप्लिकेशन/एक्स-www-form-urlencoded; charset = UTF-8" के लिए। सामग्री-प्रकार, मेरी समझ के अनुसार ASP.Net पृष्ठ को भेजा जा रहा डेटा का प्रकार बता रहा है, न कि पृष्ठ की अपेक्षा की जाने वाली डेटा के प्रकार।
  2. jQuery AJAX का डेटा भाग उद्धरण में संलग्न डेटा नाम नहीं होना चाहिए। तो डेटा: {"venorId": "AD231", "businessUnit": "123"} को डेटा द्वारा प्रतिस्थापित किया जाना चाहिए: {vendorId: "AD231", businessUnit: "123"}। इस उदाहरण में डेटा नाम विक्रेता ID और BusinessUnit हैं, जिन्हें आपके ASP.Net कोड-बैक में सामान्य ASP.Net वाक्यविन्यास का उपयोग करके अनुरोध किया जा सकता है जैसे अनुरोध ["विक्रेता Id"] और अनुरोध ["businessUnit"]।
+0

मुझे भी इस तरह से प्रयास किया गया है, कुछ भी मेरे लिए काम नहीं करता है। क्या कोई मेरी मदद कर सकता है। – user1120998

उत्तर

30

विकल्प 1. अपने सर्वर साइड कोड रखें एक ही

पहले kendo.stringify को हटा दें। तो फिर या तो contentType

"application/x-www-form-urlencoded; charset=utf-8" 

निकाल सकते हैं या करने के लिए बदल ... ... या इस के लिए अपने $ .ajax कॉल बदलने के लिए:

$.post('DocSummaryDataAsync.aspx', { vendorId: supplierId, businessUnit: busUnit, productSegmentId: prodSegmentId, programId: progId, productManagerId: prodManagerId, companyIds: compIds, expired: exp.toString(), requestType: 'TotalCount' }, function (data) { }); 

विकल्प 2. बदलें पोस्ट

प्राप्त करने के लिए इस

$.ajax({ 
async: true, 
type: "GET", 
etc. 

तरह

यह क्यू के माध्यम से अपने डेटा पास करना ueryString। आप kendo.stringify कॉल निकाल देते हैं तो आप इस तरह के सभी मानों का उपयोग होगा:

string vendorId = Request.QueryString[0]; 
string businessUnit = Request.QueryString[1]; 
etc. 

विकल्प 3. आप अपने मूल $ .ajax का उपयोग करते हैं अपने मूल $ .ajax कॉल

का प्रयोग करें , तो निम्न लागू होता है:

अनुरोध।पैराम्स को "क्वेरीरींग, फॉर्म, कुकीज़ और सर्वर वैरिएबल आइटम का संयुक्त संग्रह" मिलता है। - this link

आप इनमें से किसी के साथ काम नहीं कर रहे हैं। इसके बजाय, आपको Request.InputStream तक पहुंचने की आवश्यकता है।

सर्वर साइड जो अनुरोध किया JSON ऑब्जेक्ट, जैसे करने के लिए नक्शे पर एक कक्षा बनाएं:

यहाँ आप कैसे कर सकते हैं कि

public class MyClass 
{ 
    // The type (int or string) should probably correspond to the JSON 
    public int vendorId { get; set; } 
    public string businessUnit { get; set; } 
    public string productSegmentId { get; set; } 
    public string programId { get; set; } 
    public string productManagerId { get; set; } 
    public string companyIds { get; set; } 
    public string expired { get; set; } 
    public string requestType { get; set; } 
} 

अनुरोध को बदलें। उस प्रकार में इनपुटस्ट्रीम, और फिर आप इसका उपयोग कर सकते हैं।

public void ProcessRequest() 
{ 
    System.IO.Stream body = Request.InputStream; 
    System.Text.Encoding encoding = Request.ContentEncoding; 
    System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding); 
    string json = reader.ReadToEnd(); 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    MyClass myclass = (MyClass)serializer.Deserialize(json, typeof(MyClass)); 
    int vendorId = myclass.vendorId; 
    string requestType = myclass.requestType; 
    // etc... 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    ProcessRequest(); 
} 
+2

स्टीफन - धन्यवाद। आप एक प्रतिभाशाली हैं। मुझे उम्मीद है कि मैं आपको इस जवाब के लिए दस लाख अंक दे सकता हूं। यह मुझे जो चाहिए वह देता है। – Sunil

+0

स्टीफन - लेकिन अगर मैं इस प्रकार को टाइप करता हूं: "POST" टाइप करें: "Get", तो डेटा Request.Params [0] के पहले तत्व पर पोस्ट हो जाता है हालांकि उस पैरामीटर का कोई नाम नहीं है। तो एएसपीएक्स पृष्ठों के लिए पोस्ट की तरह मिलता है? – Sunil

+0

स्टीफन - एक प्रकार क्यों है: डेटा में जो डेटा मैं भेजता हूं उसे पोस्ट करें: ....? – Sunil