এসপ নেটওয়ান এমভিসি তে নিয়ামককে একটি সাধারণ আজাক্স কল করা


109

আমি এএসপি.নেট এমভিসি অ্যাজাক্স কল দিয়ে শুরু করার চেষ্টা করছি।

নিয়ন্ত্রক:

public class AjaxTestController : Controller
{
    //
    // GET: /AjaxTest/
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult FirstAjax()
    {
        return Json("chamara", JsonRequestBehavior.AllowGet);
    }   
}

দেখুন:

<head runat="server">
    <title>FirstAjax</title>
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            var serviceURL = '/AjaxTest/FirstAjax';

            $.ajax({
                type: "POST",
                url: serviceURL,
                data: param = "",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: successFunc,
                error: errorFunc
            });

            function successFunc(data, status) {     
                alert(data);
            }

            function errorFunc() {
                alert('error');
            }
        });
    </script>
</head>

নিয়ন্ত্রক পদ্ধতিতে ফিরে আসা ডেটার সাথে আমার কেবল একটি সতর্কতা মুদ্রণ করা দরকার। উপরের কোডটি কেবলমাত্র আমার দৃষ্টিতে "চামড়া" মুদ্রণ করুন। একটি সতর্কতা গুলি চালানো হয় না।

হালনাগাদ

আমি নীচে হিসাবে আমার নিয়ামকটি পরিবর্তন করেছি এবং এটি কাজ শুরু করে। কেন এটি এখন কাজ করছে তা আমার পরিষ্কার ধারণা নেই। কিছু দয়া করে ব্যাখ্যা করুন। "A" প্যারামিটারটি সম্পর্কিত নয় আমি এটি যুক্ত করেছি কারণ আমি একই পদ্ধতির নাম এবং পরামিতিগুলির সাথে দুটি পদ্ধতি যুক্ত করতে পারি না I আমি মনে করি এটি সমাধান হতে পারে না তবে এটি কাজ করে

public class AjaxTestController : Controller
    {
        //
        // GET: /AjaxTest/
        [HttpGet]
        public ActionResult FirstAjax()
        {
            return View();
        }

        [HttpPost]
        public ActionResult FirstAjax(string a)
        {
            return Json("chamara", JsonRequestBehavior.AllowGet);
        }
    }

জেসন ফর্ম্যাট স্ট্রিং ফিরে {"name":"chamara"}। তারপরে পড়ার চেষ্টা করুনdata['name']
রব

1
ভিউ থেকে দ্বিতীয় jQuery লাইব্রেরি সরান। আপনার কোড যেমন হয় তেমন কাজ করা উচিত। আমি মনে করি কোনও স্ক্রিপ্ট ত্রুটি হতে পারে এবং সতর্কতাটি প্রদর্শিত হতে আটকাচ্ছে।
টেরেন্স

উত্তর:


23

আপনি আপডেট করেছেন পরে,

  1. ডিফল্ট এইচটিটিপি গেট অনুরোধের সাথে এটি ফার্স্টএজ্যাক্স অ্যাকশনটিকে প্রথম কল করে এবং ফাঁকা এইচটিএমএল ভিউ রেন্ডার করে। (আগে আপনি এটি ছিল না)
  2. পরে সেই দৃশ্যটির ডোম উপাদান লোড করার পরে আপনার আজাক্স কলটি বরখাস্ত হয়ে যায় এবং সতর্কতা প্রদর্শন করে।

এর আগে আপনি কেবল কোনও এইচটিএমএল ছাড়াই ব্রাউজারে জেএসএন ফিরিয়েছিলেন। এখন এটিতে একটি HTML ভিউ রেন্ডার হয়েছে যেখানে এটি আপনার জেএসএন ডেটা পেতে পারে।

আপনি সরাসরি জেএসনকে এর সরল তথ্য এইচটিএমএল নয় রেন্ডার করতে পারবেন।


52

আপনি POSTINGসার্ভারে কিছু না হওয়ায় ডেটা অ্যাট্রিবিউটটি সরান (আপনার নিয়ামক কোনও পরামিতি আশা করে না)।

এবং আপনার এজেএক্স পদ্ধতিতে আপনি স্থির স্ট্রিংয়ের পরিবর্তে ব্যবহার Razorএবং ব্যবহার করতে পারেন @Url.Action:

$.ajax({
    url: '@Url.Action("FirstAjax", "AjaxTest")',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: successFunc,
    error: errorFunc
});

আপনার আপডেট থেকে:

$.ajax({
    type: "POST",
    url: '@Url.Action("FirstAjax", "AjaxTest")',
    contentType: "application/json; charset=utf-8",
    data: { a: "testing" },
    dataType: "json",
    success: function() { alert('Success'); },
    error: errorFunc
});

3
@ চামারা - দুঃখিত, এইচটিটিপিপোস্ট সরান (আপনি সার্ভারে কোনও কিছু পোস্ট করছেন না এটি এটি একটি অনর্থক বৈশিষ্ট্য হবে) এবং নিয়ামককে আঘাত করা হবে না। আমি যেমন আপনি বপন করেছি তেমন AJAX ফাংশনে "প্রকার: POST" সরান।
ড্যারেন

18

আপনার ক্রিয়াকলাপটিকে এভাবে কল করে আপনার ইউআরএলকে গতিশীল পরিবর্তন করতে একটি রেজার ব্যবহার করুন:

$.ajax({
    type: "POST",
    url: '@Url.Action("ActionName", "ControllerName")',
    contentType: "application/json; charset=utf-8",
    data: { data: "yourdata" },
    dataType: "json",
    success: function(recData) { alert('Success'); },
    error: function() { alert('A error'); }
});

উরল.অ্যাকশনটির প্যারামিটারগুলি এই উত্তরে পিছনের দিকে রয়েছে, এটি উরল N অ্যাকশন (অ্যাকশননাম, কন্ট্রোলারনাম)
xd6_

1
এটির কোনও ভক্ত নয়, এটি ভিউ এবং জাভাস্ক্রিপ্টের মিলনকে উত্সাহ দেয়, তবে আহ, ব্যবহারকারীর নাম চেক আউট?
হাল্টার

আপনি যখন প্রতিটি ক্রিয়াকে ব্যবহারকারীকে পুনঃনির্দেশ করতে বাধ্য করেন না তখন @ হ্যাল্টার ইউএক্স ব্যাপকভাবে উন্নত হয়। এবং ক্লায়েন্ট-সাইডে এমন অনেক কিছুই ঘটে থাকে যা সার্ভার-সাইডের যত্ন নেওয়া উচিত নয়।
কলব ক্যানিয়ন

@ কলবকন্যান আপনি 100% সঠিক আমার মন্তব্য জাভাস্ক্রিপ্টে রেজারের সাথে ইউআরএল রেন্ডারিংয়ের জন্য আরও উল্লেখ করছে, এটি আপনার জাভাস্ক্রিপ্টটি দৃ view়ভাবে দর্শন (সিএসটিএমএল) সাথে জুড়ে দেয়। এটি একটি ভাল উত্তর, তবে আঁটসাঁট পোশাকের সংশোধন করার জন্য আপনি সম্ভবত ইউএসএলকে chstml এর ডেটা অ্যাট্রিবিউটে ডাম্প করতে পারেন এবং এটি জাভাস্ক্রিপ্টে পড়তে পারেন। বিভ্রান্তির জন্য দুঃখিত!
হালটার

5

প্রথম জিনিসটি একটি পৃষ্ঠায় jquery লাইব্রেরি দুটি পৃথক সংস্করণ থাকার প্রয়োজন নেই, "1.9.1" বা "2.0.০" হয় এজ্যাক্স কল কাজ করতে যথেষ্ট ..

আপনার নিয়ামক কোডটি এখানে:

    public ActionResult Index()
    {
        return View();
    }

    public ActionResult FirstAjax(string a)
    {
        return Json("chamara", JsonRequestBehavior.AllowGet);
    }   

আপনার মতামতটি দেখতে এমনভাবে দেখা উচিত:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

<script type="text/javascript">
$(document).ready(function () {
    var a = "Test";
    $.ajax({
        url: "../../Home/FirstAjax",
        type: "GET",
        data: { a : a },
        success: function (response) {
            alert(response);
        },
        error: function (response) {
            alert(response);
        }
    });
});
</script>

5

আপনার অজ্যাক্স কলটিতে আপনার যদি কেবল # # পদ্ধতিতে আঘাত করতে হবে তবে আপনার অনুরোধটি পাওয়া গেলে আপনাকে কেবল দুটি পদার্থের টাইপ এবং url পাস করতে হবে তবে আপনাকে কেবলমাত্র url নির্দিষ্ট করতে হবে specify এটি ঠিকঠাক কাজ করে নিচের কোডটি অনুসরণ করুন।

সি # কোড:

    [HttpGet]
    public ActionResult FirstAjax()
    {
        return Json("chamara", JsonRequestBehavior.AllowGet);
    }   

অনুরোধ পেলে জাভা স্ক্রিপ্ট কোড

    $.ajax({
        url: 'home/FirstAjax',
        success: function(responce){ alert(responce.data)},
        error: function(responce){ alert(responce.data)}
    });

জাভা স্ক্রিপ্ট কোড যদি অনুরোধ পোস্ট করে এবং [এইচটিটিপিগেট] এ [এইচটিপিপিস্টে]

        $.ajax({
            url: 'home/FirstAjax',
            type:'POST',
            success: function(responce){ alert(responce)},
            error: function(responce){ alert(responce)}
        });

দ্রষ্টব্য: আপনি যদি একই নিয়ামকটিতে ফার্স্টএজাক্স করেন যেখানে আপনার ভিউ কন্ট্রোলার থাকে তবে ইউআরএলে নিয়ামকের নামের প্রয়োজন নেই। মতurl: 'FirstAjax',


4

এটি আপনার আপডেটের প্রশ্নের জন্য।

যেহেতু একই নাম এবং স্বাক্ষর সহ আপনার দুটি পদ্ধতি থাকতে পারে না তাই আপনাকে অ্যাকশননেম বৈশিষ্ট্যটি ব্যবহার করতে হবে:

হালনাগাদ:

[HttpGet]
public ActionResult FirstAjax()
{
    Some Code--Some Code---Some Code
    return View();
}

[HttpPost]
[ActionName("FirstAjax")]
public ActionResult FirstAjaxPost()
{
    Some Code--Some Code---Some Code
    return View();
}

এবং দয়া করে কীভাবে কোনও পদ্ধতি ক্রিয়া হয়ে ওঠে তার আরও রেফারেন্সের জন্য এই লিঙ্কটি উল্লেখ করুন। যদিও খুব ভাল রেফারেন্স।


1

দেখুন;

 $.ajax({
        type: 'GET',
        cache: false,
        url: '/Login/Method',
        dataType: 'json',
        data: {  },
        error: function () {
        },
        success: function (result) {
            alert("success")
        }
    });

নিয়ামক পদ্ধতি;

 public JsonResult Method()
 {
   return Json(new JsonResult()
      {
         Data = "Result"
      }, JsonRequestBehavior.AllowGet);
 }

0

পরিবর্তে url: serviceURL, ব্যবহার

url: '<%= serviceURL%>',

এবং আপনি সাফল্যফাঁকে 2 পরামিতিগুলি পার করছেন?

function successFunc(data)
 {
   alert(data);
 }

0

গ্লোবাল.এক্সে "জসনওয়ালিউপ্রভাইডার ফ্যাক্টরি" যুক্ত করুন:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}

জসনভালিউপ্রভাইডার ফ্যাক্টরি কী?
কুইকিনেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.