Как написать собственный метод успеха обратного вызова, чтобы сохранить ответ в объекте и чем на основе ответа сделать некоторые вещи? - PullRequest
0 голосов
/ 26 марта 2011

Для вызова ajax, например:

$.ajax({
   ....
   success :function(data){

   },

   error :function(error){
});

Есть ли способ, которым я могу получить эти данные из функции успеха и сохранить их в переменной?На основании полученных данных я должен сохранить какое-то свойство.

Если нет, могу ли я сделать что-то вроде

myCustomAjax({post data}, async, successFn, errorFn);

successFn - это обратный вызов, которым я хочу манипулировать извне на основенекоторое поведение.

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Я до сих пор не до конца понимаю ваш вопрос, но поле для комментариев недостаточно для того, что мне нужно набрать: эта идея действительно имеет отношение только к вызову ajax, который получает JSON, запрос JSONP может сделать некоторые альтернативные вещи.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script src="../scripts/jquery-1.5.1.min.js"></script>
</head>
<body>
    <script language="javascript">
        function doX() { alert("x"); }
        function doQ() { alert("q"); }
        function doY() { alert("y"); }
    (function () {
        $.ajax({
            url: "json.txt",
            dataType: 'json',
            cache: false,
            success: function (data, textStatus, jqXHR) {
                if (data.mySuccessProperty == "succeeded") {
                    doX();
                    (function () { eval(data.dynamicFunction)(); })();
                }
                else {
                    doY();
                    (function () { alert("Z"); })();
                }
            },
            error: function (jqXHR, textStatus, error) {
                // handle error
                alert("error" + error);
            }
        });
    })();

    </script>
</body>
</html>

json.txt содержит

{
 "mySuccessProperty": "succeeded",
 "dynamicFunction": "doQ"
}

выход будет

alert x
alert q

Мне это кажется глупым, я просто кодирую случайные вещи, которые вы можете сделать, но они не обязательно имеют смысл без контекста приложения, использующего эти идеи.

0 голосов
/ 26 марта 2011
var ajaxUrl = "/your/ajax/url";
myCustomAjax = function(data, isAsync, successCallback, errorCallback) {
    $.ajax(ajaxUrl, {
            data: data,
            async: isAsync,
            success: successCallback,
            error: errorCallback
    }
}

это то, что вы хотели?

и да, вы можете сохранить результат в любой переменной, которую хотите, но я думаю, что вы на самом деле не хотите - вы имеете дело с асинхроннымпрограммирование здесь, так что вы можете столкнуться с условиями гонки и другими проблемами.использовать обратные вызовы.

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