$ jQuery .ajax (), передайте данные успеха в отдельную функцию

Я использую $ jQuery .ajax () функция. Я поместил это в родительскую функцию, которая передает некоторые значения в функцию ajax. То, что я хотел бы сделать, имеют определяемую пользователем функцию обратного вызова, которая передала параметрический усилитель данных в от ajax функции успеха.

Вот то, что я думал, будет работать, но это не:

testFunc = function(str, callback) {
    // Send our params
    var data = 'some data to send';
    $.ajax({
        type: 'POST',
        url: 'http://www.myurl.com',
        data: data,
        success: callback
    });
}

Тогда я хочу быть в состоянии вызвать ту функцию и передачу в моей пользовательской функции так, чтобы я мог использовать данные функций успеха из той функции:

testFunc('my string data', function(data){
    alert(data);
});

Я желаю, чтобы это совпало с:

testFunc = function(str, callback) {
    // Send our params
    var data = 'some data to send';
    $.ajax({
        type: 'POST',
        url: 'http://www.myurl.com',
        data: data,
        success: function(data) {
            alert(data);
        }
    });
}
22
задан Nic Hubbard 8 March 2010 в 17:57
поделиться

5 ответов

У меня отлично работает:

<script src="/jquery.js"></script>
<script>
var callback = function(data, textStatus, xhr)
{
    alert(data + "\t" + textStatus);
}

var test = function(str, cb) {
    var data = 'Input values';
    $.ajax({
        type: 'post',
        url: 'http://www.mydomain.com/ajaxscript',
        data: data,
        success: cb
    });
}
test('Hello, world', callback);
</script>
34
ответ дан 29 November 2019 в 03:47
поделиться

В первом блоке кода вы никогда не используете параметр str . Вы хотели сказать следующее?

testFunc = function(str, callback) {
    $.ajax({
        type: 'POST',
        url: 'http://www.myurl.com',
        data: str,
        success: callback
    });
}
2
ответ дан 29 November 2019 в 03:47
поделиться

Хотя я не уверен на 100%, что вы хотите (возможно, мой мозг сегодня работает медленно), вот пример использования, похожего на то, что вы описали:

function GetProcedureById(procedureId)
{
    var includeMaster = true;
    pString = '{"procedureId":"' + procedureId.toString() + '","includeMaster":"' + includeMaster.toString() + '"}';
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: pString,
        datatype: "json",
        dataFilter: function(data)
        {
            var msg;
            if (typeof (JSON) !== 'undefined' &&
                    typeof (JSON.parse) === 'function')
                msg = JSON.parse(data);
            else
                msg = eval('(' + data + ')');
            if (msg.hasOwnProperty('d'))
                return msg.d;
            else
                return msg;
        },
        url: "webservice/ProcedureCodesService.asmx/GetProcedureById",
        success: function(msg)
        {
            LoadProcedure(msg);
        },
        failure: function(msg)
        {
            // $("#sometextplace").text("Procedure did not load");
        }
    });
};
/* build the Procedure option list */
function LoadProcedure(jdata)
{
    if (jdata.length < 10)
    {
        $("select#cptIcdProcedureSelect").attr('size', jdata.length);
    }
    else
    {
        $("select#cptIcdProcedureSelect").attr('size', '10');
    };
    var options = '';
    for (var i = 0; i < jdata.length; i++)
    {
        options += '<option value="' + jdata[i].Description + '">' + jdata[i].Description + ' (' + jdata[i].ProcedureCode + ')' + '</option>';
    };
    $("select#cptIcdProcedureSelect").html(options);
};
1
ответ дан 29 November 2019 в 03:47
поделиться

Я считаю, что ваша проблема в том, что вы передаете testFunct строку, а не объект функции (возможно ли это?)

1
ответ дан 29 November 2019 в 03:47
поделиться

вот как я это делаю

function run_ajax(obj) {
    $.ajax({
        type:"POST",
        url: prefix,
        data: obj.pdata,
        dataType: 'json',
        error: function(data) {
            //do error stuff
        },
        success: function(data) {

            if(obj.func){
                obj.func(data); 
            }

        }
    });
}

alert_func(data){
    //do what you want with data
}

var obj= {};
obj.pdata = {sumbit:"somevalue"}; // post variable data
obj.func = alert_func;
run_ajax(obj);
3
ответ дан 29 November 2019 в 03:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: