在javascript中调用方法,但错误抛出?

时间:2013-06-10 20:51:11

标签: javascript jquery

我需要调用几个地方的ajax方法。所以想通过为它创建单独的方法来尝试最小化代码。如果直接使用,它的工作完美。但是当我分开时它将无法工作。

    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
}
如果我这样打电话,它不起作用。它说Microsoft JScript runtime error: 'query' is undefined,如何修复它?

{
    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);
                    }
                });
            },

2 个答案:

答案 0 :(得分:2)

你打电话

source: callAutoCompleteAjaxMethod(query, ...

但你从来没有给'查询'一个值,给它一个值,它会起作用。

答案 1 :(得分:1)

调用该函数,而不是将其分配给source属性。此时变量query未定义。

你必须分配一个函数,以便插件可以在以后调用它:

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

(我希望$value在某处定义)

函数引用后的括号(())总是立即调用该函数。如果要传递对函数的引用,则不要在其后面加上括号。