كيف يمكنني الحصول على JQGrid الاعتراف الخادم إرسال الأخطاء ؟

StackOverflow https://stackoverflow.com/questions/1636580

  •  06-07-2019
  •  | 
  •  

سؤال

لدي jqgrid أن الأشغال بشكل جيد جدا.

أنا أتساءل هل من الممكن للقبض على الملقم إرسال الأخطاء ؟ كيف يتم ذلك ؟

هل كانت مفيدة؟

المحلول

أنا مؤخرا على نطاق واسع jqgrid على نموذج مشروع أنا أعمل على سي بي ريتشارد إيليس (صاحب العمل).هناك العديد من الطرق لنشر jqgrid ، كما لوحظ في الوثائق:(انظر "استرداد البيانات" عقدة).

حاليا أقوم بإجراء مكالمة بإرجاع سلسلة سلمان أنه عند تقييم يعطيني كائن الذي يحتوي على ما يلي:

  • ColumnNames:string[]
  • ColumnModels:كائن[] (كل كائن له خصائص "اسم" ، "مؤشر" و "للفرز")
  • البيانات:كائن[] (كل كائن له خصائص تطابق الأسماء في العمود نموذج)
  • TotalRows:الباحث

في نجاح الاستدعاء ، أنا يدويا إنشاء jqgrid مثل هذا:("البيانات" هو كائن أحصل عند تقييم عاد سلسلة json).

var colNames = data.ColumnNames;
var colModel = data.ColumnModels;
var previewData = data.PreviewData;
var totalRows = data.TotalRows;
var sTargetDiv = userContext[0]; // the target div where I'll create my jqgrid

$("#" + sTargetDiv).html("<table cellpadding='0' cellspacing='0'></table>");
var table = $("#" + sTargetDiv + " > table");
table.jqGrid({
    datatype: 'local',
    colNames: colNames,
    colModel: colModel,
    caption: 'Data Preview',
    height: '100%',
    width: 850,
    shrinkToFit: false
});

for (var row = 0; row < previewData.length; ++row)
    table.addRowData(row, previewData[row]);

لذلك يمكنك أن ترى أنا يدويا ملء البيانات.هناك أكثر من 1 نوع من خطأ في الخادم.هناك هو الخطأ المنطقي الذي يمكن أن يعود كما في سلسلة json و التحقق قبل محاولة إنشاء jqgrid (أو لكل صف أساس).

if (data.HasError) ...

أو لكل صف أساس

for (var row = 0; row < previewData.length; ++row)
{
    if (previewData[row].HasError)
        // Handle error, display error in row, etc
        ...
    else
        table.addRowData(row, previewData[row]);
}

إذا كان لديك خطأ استثناء غير معالج على الملقم, ثم ربما كنت سوف ترغب في خطأ رد على الاتصال المتزامن.في هذه الحالة, نجاحك الاستدعاء التي (يفترض) هو إنشاء jqgrid لا يسمى على الإطلاق.

هذا بالطبع ينطبق على يدويا والتزويد jqgrid ، التي ليست سوى واحدة من العديد من الخيارات المتاحة.إذا كان لديك jqgrid السلكية مباشرة إلى استدعاء خدمة أو وظيفة لاسترداد البيانات فهذا شيء آخر تماما.

على صفحة الوثائق ، انظر تحت الأساسي شبكات > الأحداث.هناك سترى "loadError" الحدث التي قد تأتي في متناول اليدين.

نصائح أخرى

إذا نظرتم الى jqgrid عرض الموقع وإلقاء نظرة على "ما هو الجديد في الإصدار 3.2 "يجب أن يكون هناك قسم حول التحكم في أخطاء الخادم.

وعلى وجه التحديد، فإنه يستخدم loadError المعلمة رد:

loadError : function(xhr,st,err) { 
    jQuery("#rsperror").html("Type: "+st+"; Response: "+ xhr.status + " "+xhr.statusText);
}

وكما تنص MCV أعلاه، بعض الأخطاء أخطاء البيانات، لذلك ستحتاج للتعامل مع هذه على وجه التحديد.

استخدم في رد. إذا كنت تحصل على خطأ HTTP الفعلي (400 أو 500، على سبيل المثال)، يتم تشغيل loadError (XHR، والوضع، خطأ).

ولكن يجب أن بعض الأخطاء (مثل التحقق من صحة) لا رمي خطأ 400 أو 500. ولكن لا يزال بإمكانك قبض على هؤلاء في loadComplete (XHR). تحليل سلمان بك، والتحقق من كل ما الطريقة التي تستخدمها لتحديد الأخطاء. على سبيل المثال، أنا أفعل هذا في بلدي loadComplete ():

وif (jsonResponse.errors) { $.each(jsonResponse.errors, function(i, val){ addErrorMessage($("#"+val.field), val.message); }); }

وشيء آخر أن نتذكر / أو التي وجدت هي أنه إذا كنت تستخدم Asp.net تحتاج إلى تشغيل

في القسم - وهذا سوف يسمح لك إلى التأمل في رسالة يعاود فضلا

إذا كنت تستخدم jqGrid مع الخيارات

            ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
            datatype: "json",
            url: wsPath

لتحميل البيانات عبر AJAX و خدمات الويب أو MVC التحكم ، ثم هذا الجواب هو لك.

ملاحظة أنه إذا كان يحدث خطأ وقت تشغيل في شبكة الإنترنت طريقة التعامل مع اياكس الاتصال, لا يمكن أن يكون catched عبر loadError لأن loadError فقط يمسك HTTP ذات الأخطاء.عليك أن قبض على خطأ في ويب طريقة عبر try ... catch, ثم تمر عليه في شكل JSON في كتلة catch باستخدام return JsonString.ومن ثم يمكن التعامل معها في loadComplete الحدث:

loadComplete: function (data) {
                    if (this.p.datatype === 'json') {
                        if (data!==undefined && data!==null && isErrorJson(data)) {
                            ShowErrorDialog(getJsonError(data));
                        }
                // ...
              }

وظائف أعلاه التالية المعنى تنفيذها حسب الحاجة:

  • isErrorJson(data):إرجاع true إذا كان كائن البيانات يحتوي على خطأ كما هو محدد في الويب الخاص بك طريقة
  • getJsonError(data):ترجع السلسلة مع رسالة الخطأ كما هو محدد في الويب الخاص بك طريقة
  • ShowErrorDialog(msg):يعرض رسالة الخطأ على الشاشة مثلعبر jQueryUI الحوار.

في أسلوب خدمة ويب يمكنك استخدام JavaScriptSerializer لخلق هذا الكائن خطأ ، 2 جافا سكريبت الأساليب المذكورة أعلاه يمكنك استخدام وظيفة مسج $.parseJSON(data.d) للحصول على الرسالة من كائن JSON.

function gridCroak(postdata, _url, grid, viewCallBack, debug) {
$(".loading").css("display", "block");
$.ajax({
    type: 'POST',
    url: _url,
    data: postdata,
    dataType: "xml",
    complete: function(xmldata, stat){
    if(stat == "success") {
        $(".loading").css("display", "none");
        var errorTag = xmldata.responseXML.getElementsByTagName("error_")[0];
        if (errorTag) {
        $("#ErrorDlg").html(errorTag.firstChild.nodeValue);
        $("#ErrorDlg").dialog('open');
        } else {
        var warningTag = xmldata.responseXML.getElementsByTagName("warning_")[0]; 
        if (warningTag) {
            $("#WarningDlg").html(warningTag.firstChild.nodeValue);
            $("#WarningDlg").dialog('open');
        } else {
            if (debug == true) {
            alert(xmldata.responseText);
            }
            jQuery(grid)[0].addXmlData(xmldata.responseXML);
            if(viewCallBack) viewCallBack();
        }
        }
    } else {
        $("#ErrorDlg").html("Servizio Attualmente Non Disponibile !");
        $("#ErrorDlg").dialog('open');
    }
    }
});
}

وفي الشبكة

datatype : function(postdata) { gridCroak(postdata, 'cgi-bin/dummy.pl?query=stock', 
                                                    "#list", null, false) },

وفي نهاية أنها لا تستخدم نفس النهج على ما أعتقد.

وشكر جميع

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top