0

我需要调用 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);
                    }
                });
            },
4

2 回答 2

2

你打电话

source: callAutoCompleteAjaxMethod(query, ...

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

于 2013-06-10T20:54:22.690 回答
1

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

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

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

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

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

于 2013-06-10T20:57:14.427 回答