Jquery অ্যাজাক্স জবসন webservice পোস্ট




ajax web-services (4)

আমি একটি asp.net webservice একটি JSON বস্তু পোস্ট করার চেষ্টা করছি।

আমার জসন এইরকম দেখাচ্ছে:

var markers = { "markers": [
  { "position": "128.3657142857143", "markerPosition": "7" },
  { "position": "235.1944023323615", "markerPosition": "19" },
  { "position": "42.5978231292517", "markerPosition": "-3" }
]};

আমি json2.js ব্যবহার করছি আমার json বস্তু stryfy।

এবং আমি আমার webservice এটি পোস্ট করার জন্য jquery ব্যবহার করছি।

  $.ajax({
        type: "POST",
        url: "/webservices/PodcastService.asmx/CreateMarkers",
        data: markers,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(data){alert(data);},
        failure: function(errMsg) {
            alert(errMsg);
        }
  });

আমি নিম্নলিখিত ত্রুটি পেয়েছি:

"অবৈধ JSON আদিম:

আমি এই সম্পর্কিত পোস্টগুলির একটি গুচ্ছ পেয়েছি এবং এটি একটি সাধারণ সমস্যা বলে মনে হচ্ছে কিন্তু আমি সমস্যাটির সমাধান করার চেষ্টা করি না।

যখন সার্ভারে পোস্ট করা হচ্ছে তখন ফায়ারবগ এটির মতো দেখায়:

চিহ্নিতকারী% 5B0% 5D% 5Bposition% 5D = 128,3657142857143 & চিহ্নিতকারী% 5B0% 5D% 5BmarkerPosition% 5D = 7 & চিহ্নিতকারী% 5B1% 5D% 5Bposition% 5D = 235,1944023323615 & চিহ্নিতকারী% 5B1% 5D% 5BmarkerPosition% 5D = 19 & চিহ্নিতকারী% 5B2% 5D% 5Bposition% 5D = 42,5978231292517 & চিহ্নিতকারী% 5B2% 5D% 5BmarkerPosition% 5D = -3

আমার webservice ফাংশন বলা হচ্ছে যে হয়:

[WebMethod]
public string CreateMarkers(string markerArray)
{
    return "received markers";
}

  1. markers একটি JSON বস্তু নয়। এটি একটি স্বাভাবিক জাভাস্ক্রিপ্ট বস্তু।
  2. api.jquery.com/jQuery.ajax :

    তথ্য সার্ভারে পাঠানো হবে। এটি ইতিমধ্যে একটি স্ট্রিং না থাকলে, একটি ক্যোয়ারী স্ট্রিং রূপান্তরিত করা হয়।

আপনি যদি JSON হিসাবে তথ্য পাঠাতে চান তবে আপনাকে প্রথমে এটি এনক্রিপ্ট করতে হবে:

data: {markers: JSON.stringify(markers)}

jQuery স্বয়ংক্রিয়ভাবে JSON থেকে বস্তু বা অ্যারে রূপান্তর না।

কিন্তু আমি মনে করি ত্রুটির বার্তাটি পরিষেবার প্রতিক্রিয়া ব্যাখ্যা করে এসেছে। আপনি যে পাঠ্যটি পাঠাবেন তা JSON নয়। JSON স্ট্রিং ডবল কোট সংযুক্ত করা আছে। তাই আপনাকে করতে হবে:

return "\"received markers\"";

আমি আপনার প্রকৃত সমস্যা তথ্য প্রেরণ বা গ্রহণ করা হয় কিনা তা নিশ্চিত নই।


আপনি আপনার তথ্য স্ট্রাইক করার জন্য json2.js ব্যবহার করে উল্লেখ করেছেন, তবে পোস্ট হওয়া তথ্যটি ইউআরএল এনকোডেড JSON বলে মনে হচ্ছে আপনি এটি ইতিমধ্যে দেখেছেন তবে অবৈধ JSON প্রিম্যাটিক কভার সম্পর্কে এই পোস্টটি কেন JSON URLEncoded হচ্ছে।

আমি আপনার পদ্ধতিতে একটি কাঁচা, ম্যানুয়াল সিরিয়ালাইজড JSON স্ট্রিং পাস বিরুদ্ধে পরামর্শ চাই। ASP.NET স্বয়ংক্রিয়ভাবে অনুরোধের POST ডেটা JSON হ্রাস করতে যাচ্ছে, তাই যদি আপনি ASP.NET এ একটি JSON স্ট্রিং পাঠাচ্ছেন এবং JSON স্ট্রিং পাঠাচ্ছেন তবে আপনি আপনার JSON সিরিয়ালাইজড স্ট্রিংটি সিরিয়ালাইজ করতে JSON করতে শেষ হয়ে যাবেন।

আমি এই লাইন বরাবর আরো কিছু সুপারিশ:

var markers = [{ "position": "128.3657142857143", "markerPosition": "7" },
               { "position": "235.1944023323615", "markerPosition": "19" },
               { "position": "42.5978231292517", "markerPosition": "-3" }];

$.ajax({
    type: "POST",
    url: "/webservices/PodcastService.asmx/CreateMarkers",
    // The key needs to match your method's input parameter (case-sensitive).
    data: JSON.stringify({ Markers: markers }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data){alert(data);},
    failure: function(errMsg) {
        alert(errMsg);
    }
});

অবৈধ JSON আদিম সমস্যাটি এড়িয়ে চলার কীটি জাভাস্ক্রিপ্ট অবজেক্টের জন্য কোনও JPON স্ট্রিং data প্যারামিটারের জন্য পাস করা, যাতে jQuery আপনার ডেটা URLEncode করার চেষ্টা করে না।

সার্ভার-পাশে, আপনার পাস করা ডেটা আকারের আকারে আপনার পদ্ধতির ইনপুট পরামিতিগুলির সাথে মেলে:

public class Marker
{
  public decimal position { get; set; }
  public int markerPosition { get; set; }
}

[WebMethod]
public string CreateMarkers(List<Marker> Markers)
{
  return "Received " + Markers.Count + " markers.";
}

আপনি যদি পছন্দ করেন তবে Marker[] Markers মত একটি অ্যারেও গ্রহণ করতে পারেন। এসএসএক্সএক্স স্ক্রিপ্ট সার্ভারগুলি (জাভাস্ক্রিপ্টসিয়ালাইজার) ব্যবহার করে ডেসারিয়ালাইজারটি বেশ নমনীয়, এবং আপনার ইনপুট ডেটাটিকে আপনি নির্দিষ্ট করে সার্ভার-সাইড টাইপ রূপে রূপান্তর করতে পারেন।


আমি জিজ্ঞাসা আছে,

$("#login-button").click(function(e){ alert("hiii");

        var username = $("#username-field").val();
        var password = $("#username-field").val();

        alert(username);
        alert("password" + password);



        var markers = { "userName" : "admin","password" : "admin123"};
        $.ajax({
            type: "POST",
            url: url,
            // The key needs to match your method's input parameter (case-sensitive).
            data: JSON.stringify(markers),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data){alert("got the data"+data);},
            failure: function(errMsg) {
                alert(errMsg);
            }
        });

    });

আমি জেসন এর লগইন বিশদ পোস্ট করছি এবং "Success" হিসাবে একটি স্ট্রিং পাচ্ছি, কিন্তু আমি প্রতিক্রিয়া পাচ্ছি না।


আমি ডেভ ওয়ার্ড এর সমাধান চেষ্টা করেছিলাম। কনটেন্ট টাইপটি "application/json" জসন "application/json" সেট করা হয়েছে, কারণ পোস্টের অনুরোধের পেলোড অংশে ডেটা অংশটি ব্রাউজার থেকে পাঠানো হচ্ছে না। একবার আমি এই লাইন মুছে ফেলা সবকিছু মহান কাজ।

var markers = [{ "position": "128.3657142857143", "markerPosition": "7" },

               { "position": "235.1944023323615", "markerPosition": "19" },

               { "position": "42.5978231292517", "markerPosition": "-3" }];

$.ajax({

    type: "POST",
    url: "/webservices/PodcastService.asmx/CreateMarkers",
    // The key needs to match your method's input parameter (case-sensitive).
    data: JSON.stringify({ Markers: markers }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data){alert(data);},
    failure: function(errMsg) {
        alert(errMsg);
    }
});




json