James123
James123

Reputation: 11672

calling method in javascript, but error throws?

I need to call ajax method couple of places. So want to try to minimize the code by creating separate method for it. If use directly, it works perfect. but when I separate it won't work.

    data: columns[5],
    type: 'autocomplete',   
    options: { items: 100 },
    source: function (query, process) {    
            $.ajax({
            url: "/EditInitiatives.svc/GetLocationData?clientId=" + $value.val(),
            type: "GET",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: {
                      query: query
                   },
            success: function (response) {
                        process(response.d);
                     }
             });
          },
          strict: true
}

it doesn't work, if I call this way. It says Microsoft JScript runtime error: 'query' is undefined, how to fix it?

{
    data: columns[4],
    type: 'autocomplete', 
    options: { items: 100 },
    source: callAutoCompleteAjaxMethod(query, process, "/EditInitiatives.svc/GetLocationData?clientId=" + $value.val()),
    strict: true

 },

callAutoCompleteAjaxMethod = function (query, process, url) {
                 $.ajax({
                    url:url,
                    type: "GET",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    data: {
                        query: query
                    },
                    success: function (response) {
                        process(response.d);
                    }
                });
            },

Upvotes: 0

Views: 77

Answers (2)

Felix Kling
Felix Kling

Reputation: 817208

You are calling the function instead of assigning it to the source property. And at this moment the variable query is not defined.

You have to assign a function, so that the plugin can call it later:

source: function (query, process) {
    callAutoCompleteAjaxMethod(
        query, 
        process, 
        "/EditInitiatives.svc/GetLocationData?clientId=" + $value.val()
    );
}

(I hope $value is defined somewhere)

Parenthesis ( () ) after a function reference always calls the function immediately. If you want to pass a reference to the function, you don't put parenthesis after it.

Upvotes: 1

Jonast92
Jonast92

Reputation: 4967

You call

source: callAutoCompleteAjaxMethod(query, ...

But you never gave 'query' a value, give it a value and it will work.

Upvotes: 2

Related Questions