دسته بندی ها
01:45 1399/04/28

دریافت مقدار undefined بعد از ارسال درخواست به سرور توسط Jquery ajax

مشخصات سوال کننده :
کاربر : Mahdi76     امتیاز کاربر : 2     رتبه کاربر : 145
دسته بندی : Asp.net Core PHP جی کوئری جاوا اسکریپت

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3081
هوش مصنوعی

پاسخ هوش مصنوعی

مشکل شما ممکن است به دلیل فرمت نادرست داده ها یا عدم تطابق با داده های دریافتی از سرور باشد. در اینجا چند نکته و تغییرات پیشنهادی برای بررسی و اصلاح کد خود ارایه می شود.

اول از همه، مطمین شوید که در یک نمایش JSON درست از سمت کنترلر به کلاینت ارسال می کنید. به عنوان مثال، مطمین شوید که در مدل SellRepModel فیلد CustomerName وجود دارد و مقدار آن هنگام دریافت از پایگاه داده به درستی پر شده است.

در کد سمت ویو، اگر به item1.FromSource مقدار undefined می دهد، ممکن است که این فیلد در داده های دریافتی وجود نداشته باشد. پیشنهاد می کنم در کنسول مرورگر، محتوای resultGet را بررسی کنید.

می توانید کدهای زیر را برای بررسی پیشنهاد کنید:

 
function Add(selectionFilter) {
    var html = "";
    
    $.ajax({
        url: "/SellRep/AddData/",
        type: "POST",
        data: JSON.stringify(selectionFilter),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (resultGet) {
            console.log(resultGet); // بررسی محتوای resultGet
            
            if (resultGet && resultGet.length !== 0) {
                alert(resultGet.length);

                $.each(resultGet, function (key, item1) {
                    console.log(item1); // بررسی محتوای item1
                    alert(item1.FromSource);
                    // اطمینان حاصل کنید که CustomerName در item1 وجود دارد
                    html += "<tr>" +
                            "<td> " + (item1.CustomerName || 'ناموجود') + "</td>" +
                            "</tr>";
                });

                $("#booksTable > tbody").html(html);
            } else {
                alert("هیچ داده ای یافت نشد.");
            }
        }
    });
}

سپس اطمینان حاصل کنید که کد کنترلر شما به درستی کار می کند و لیست SellRepModels به درستی تولید شده است:


public IActionResult AddData([FromBody]SelectionFilter selectionFilter)
{
    List SellRepModels = new List(); // اطمینان از تعریف مدل

    if (selectionFilter != null)
    {
        SellRepModels = _context.SellRepModels.FromSql("EXEC HS_BasGetInvoiceRep").ToList();
        return new JsonResult(SellRepModels);
    }

    return new JsonResult(new List()); // برگرداندن لیست خالی در صورت عدم وجود فیلتر
}

با این تغییرات، می توانید اشکالات را به راحتی شناسایی کرده و حل کنید. بررسی داده های دریافتی با console.log به شما کمک می کند تا مطمین شوید که داده ها به درستی در حال ارسال و دریافت هستند.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : Crystalplanet1991 17:36 1399/04/28

دوست عزیز در core وقتی یک مدل رو در پاسخ به یک درخواست ajax بر میگردونید نام فیلد های دریافت شده با نامی که شما در مدل روی اونها گذاشتید ممکنه متفاوت باشه.

به فرض مثال شما یک پراپرتی در مدلتون دارید به نام PostalCode 

ولی در ویو در متد success ایجکس با نام postalCode دریافتش میکنید و p اول کلمه کوچیک میشه .

به همین دلیل هم هست که مقدار undefined دریافت میکنید

به این پاسخ امتیاز بدهید    1
امتیاز: 13 رتبه: 55
پاسخ دهنده : saedbfd 18:32 1399/04/28

با سلام و درود

 

شما کدهای خودتون رو کامل قرار ندادید. اما اولین مشکلی که در همین کدها میشه مشاهده کرد این هست که وقتی میخواید مقداری رو از سمت سرور دریافت کنید که توسط یک درخواست ایجکس ارسال شده نام پارامترهای دریافتی باید همه حروف کوچک باشه.

 

 $.each(resultGet,
                            function (key, item1) {
                                alert(item1.FromSource);
                             //   alert(result.CustomerName);
                                html += "<tr>"
                                     //در این قسمت
                                    +"<td> " + item1.customername + "</td >"
                                           
                                    +"</tr>";

                              //  alert(html);
                                         
                                         
                                      
                            });

 

همچنین در سمت کنترلر هم باید نام متغیرهای با حروف کوچک ارسال بشه

 

_context.Customer_Table.Select(C => new {customername = C.CustomerName, customerid = C.CustomerID});

 

البته قطعه کد بالا یک نمونه تستی می باشد.

به این پاسخ امتیاز بدهید    0
امتیاز: 1664 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود