JQuery функция с переменной проблемой - PullRequest
0 голосов
/ 17 ноября 2010

Я пытаюсь вернуть список опций выбора в функцию JqGrid Add.У меня есть функция javascript / jquery, которая выполняет GET для получения строки, предварительно отформатированной для работы с JqGrid.У меня проблемы с возвратом результатов в JqGrid, хотя.Как вернуть данные из функции Get jQuery?

function getDealerPoolSelectOptions() {
var selectOptions = "1:A;";
$.get("DealerManagement/GetAllDealerPoolCodes", function(data) {
    alert("Data: " + data.toString()); //Displays all the data I'm looking for
    selectOptions = data;
});
alert("SelectOptions: " + selectOptions); //Just Displays the 1:A
return selectOptions;
}

Ответы [ 4 ]

2 голосов
/ 17 ноября 2010

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

РЕДАКТИРОВАТЬ: хотя вы можете делать синхронные запросыДолжен отметить, что это очень обескураживает.Вместо этого вы должны разработать свой код таким образом, чтобы использовать преимущества программирования, управляемого событиями.

Вы можете сделать синхронный запрос, подобный этому:

function getDealerPoolSelectOptions() {
    var selectOptions = "1:A;";
    $.ajax({
        async: false,
        url: "DealerManagement/GetAllDealerPoolCodes",
        success: function(data) {
            alert("Data: " + data.toString()); //Displays all the data I'm looking for
            selectOptions = data;
        }
    });
    alert("SelectOptions: " + selectOptions); 
    return selectOptions;
}
2 голосов
/ 17 ноября 2010

$.get начинает асинхронный запрос AJAX и вызывает ваш обратный вызов function(data) ..., как только он будет выполнен$.get само возвращается до завершения запроса.Часть alert("SelectOptions ...") запускается немедленно (до получения данных), поэтому selectOptions еще не установлен.

1 голос
/ 17 ноября 2010

Вероятно, вы должны описать вашу первоначальную проблему.Что вы хотите сделать с jqGrid?

Хотите заполнить поле выбора или поиска данными с сервера?Вам следует использовать dataUrl из правок или поисков .Функция (dataUrl) введена именно для загрузки данных по ajax.

Если данные, которые вы можете предоставить с сервера, могут быть только в формате JSON, а не в формате, который ожидает jqGrid, вы можете использоватьbuildSelect дополнительно для переформатирования данных, возвращаемых с сервера.Для получения дополнительной информации см. Мой старый ответ .

0 голосов
/ 17 ноября 2010

Предупреждение вызывается до selectOptions = data;, потому что функции ajax вызываются асинхронно. Если вы хотите, чтобы что-то произошло, например, добавление данных в сетку, вызовите это в обратном вызове get после того, как вы установите данные selectOptions.

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