jquery - 创建一个通用的ajax函数

时间:2012-02-18 00:07:25

标签: jquery

  

可能重复:
  jQuery Ajax always returns “undefined”?

我正在尝试提出一个通用的jquery ajax函数,该函数使用url&参数并返回结果。我试图避免使用async:false,因为它锁定了浏览器。如果我在ajax调用中使用success回调,由于时间问题,返回的数据为空(成功不会等到数据返回)。如果我使用complete,则persons对象在LoadPersons方法中仍为空,因为它不等待从ajax调用返回数据。如果在alert(persons)回调中放置complete,我会收到[object][Object],这样我就会收到数据。我该如何“解决”这个问题?我在说感觉吗?理想情况下,我还希望在这样做时显示“loading ..”图像。

这是我的代码 -

  <script type="text/javascript">
    $(function() {
                var persons;
                var urlGetPersons = "Default.aspx/GetPersons";

                LoadPersons();

                function LoadPersons() {
                    persons = CallMethod(urlGetPersons, { });
                    if (persons != null) {
                        // do something with persons.
                    }
                }

                function CallMethod(url, parameters) {
                    var data;
                    $.ajax({
                        type: 'POST',
                        url: url,
                        data: JSON.stringify(parameters),
                        contentType: 'application/json;',
                        dataType: 'json',
                        success: function(result) {
                            data = result.d;
                        }, // use success?
                        complete: function(result) {
                            data = result.d;
                        } // or use complete?
                    });
                    return data;
                }
            });
   </script>

3 个答案:

答案 0 :(得分:15)

这就是我对“通用”的想法 - 但它仍然是异步的:

function CallMethod(url, parameters, successCallback) {
                //show loading... image

                $.ajax({
                    type: 'POST',
                    url: url,
                    data: JSON.stringify(parameters),
                    contentType: 'application/json;',
                    dataType: 'json',
                    success: successCallback,
                    error: function(xhr, textStatus, errorThrown) {
                        console.log('error');
                    }
                });
            }

CallMethod(url, pars, onSuccess);

function onSuccess(param) {
    //remove loading... image
    //do something with the response
}

答案 1 :(得分:0)

我知道我之前已经找到了[object] [Object] ....你确定你的应用程序正在返回json吗?如果没有,Json.NET让它变得非常简单。您可能还需要调用$ .parseJSON。

答案 2 :(得分:0)

$ .ajax是一个通用的jQuery函数。

你想做这样的事情:

$(function() {
            function LoadPersons(data) {
                // do something with data
            }

            $.ajax({
                type: 'POST',
                url: url,
                data: JSON.stringify(parameters),
                contentType: 'application/json;',
                dataType: 'json',
                success: function(result) {
                    // do something with persons (data)
                    // e.g. LoadPersons(data);
                }
            });
   });

以文本形式:

你的ajax成功应该是在成功返回数据后负责处理数据的部分。您之前的方法尝试在必须完成AJAX方法之前返回数据。您可以直接在$(function(){..})中添加$ .ajax方法,以便在页面加载时调用它。

另外,我建议使用Firebug之类的工具来检查AJAX调用的输出/响应。