JQuery Json ошибка: объект не поддерживает это свойство или метод - PullRequest
2 голосов
/ 01 мая 2010

ОШИБКА: ошибка времени выполнения Microsoft JScript: объект не поддерживает это свойство или метод

вот как звонит json2:

   **var json = JSON2.stringify(settings.data);**

Я использую службу WCF для извлечения данных, и она очень проста для целей тестирования, и она возвращает мне данные из службы wcf, но происходит сбой на json2.js номер строки 314-316

// We split the first stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace all backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.

                if (/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

вот что я делаю

    // *** Generic Service Proxy class that can be used to 
// *** call JSON Services generically using jQuery
// *** Depends on JSON2 modified for MS Ajax usage
function serviceProxy(wjOrderServiceURL) {
    var _I = this;
    this.ServiceURL = wjOrderServiceURL;

    // *** Call a wrapped object
    this.invoke = function (options) {

        // Default settings
        var settings = {
            serviceMethod: '',
            data: null,
            callback: null,
            error: null,
            type: "POST",
            processData: false,
            contentType: "application/json", 
            dataType: "text",
            bare: false
        };

        if (options) {
            $.extend(settings, options);
        }

        // *** Convert input data into JSON - REQUIRES Json2.js
        var json = JSON2.stringify(settings.data);

        // *** The service endpoint URL
        var url = _I.ServiceURL + settings.serviceMethod;
      debugger
        $.ajax({
            url: url,
            data: json,
            type: settings.type,
            processData: settings.processData,
            contentType: settings.contentType,
            timeout: settings.timeout,
            error: settings.error,
            dataType: settings.dataType,
            success:
                    function (res) {
                        if (!settings.callback) { return; }

                        // *** Use json library so we can fix up MS AJAX dates
                        var result = JSON2.parse(res);
                        debugger
                        if (result.ExceptionDetail) {
                            OnPageError(result.Message);
                            return;
                        }

                        // *** Bare message IS result
                        if (settings.bare)
                        { settings.callback(result); return; }

                        //http://encosia.com/2009/07/21/simplify-calling-asp-net-ajax-services-from-jquery/
                        if (result.hasOwnProperty('d'))
                        { return settings.callback(result.d); }
                        else
                        { return result; }


                        // *** Wrapped message contains top level object node
                        // *** strip it off
                        //                        for (var property in result) {
                        //                            settings.callback(result[property]);
                        //                            break;
                        //                        }
                    }
        });
    };
}



 function GetFederalHolidays() {

        $("#dContacts1").empty().html('Searching for Active Contacts...');  
        ContactServiceProxy.invoke({ serviceMethod: "Holidays",
            callback: function (response) {
    //           ProcessActiveContacts1(response);
                debugger
            },
            error: function (xhr, errorMsg, thrown) {
                postErrorAndUnBlockUI(xhr, errorMsg, thrown);
            }
        });        
}

ОК возвращает мне простую строку

  public List<string> Holidays()
        {
            List<string> s = new List<string>();
            s.Add("01/01/2010");
            s.Add("02/01/2010");
            s.Add("03/01/2010");
            s.Add("04/01/2010");
            s.Add("05/01/2010");
            return s;

        }

любая помощь, что я делаю неправильно? я пытаюсь перейти от dataType: text к json, но я получаю ту же ошибку выше.

Ответы [ 3 ]

0 голосов
/ 02 мая 2010

Похоже, ошибка в Json2.js. Лично я очень скептически отношусь, когда вижу пользовательские библиотеки JSON в JS. Я бы посоветовал попробовать что-то вроде этого:

http://developer.yahoo.com/yui/json/

Я использовал его много раз в прошлом, и это было просто замечательно.

Следует также отметить, что стандартный способ доступа к функциям JSON в браузере, совместимом со стандартами, - это что-то вроде JSON.stringify(...), а не через JSON2. Если вы используете современный браузер, вам не нужно использовать отдельную библиотеку для выполнения JSON.

С наилучшими пожеланиями

0 голосов
/ 16 мая 2010

Я понял, проблема была в том, что он ожидал объект (Праздник)

0 голосов
/ 01 мая 2010
this.invoke = function (options) {

Прежде всего, закройте эту функцию с помощью };.

И еще } для закрытия первой функции, serviceProxy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...