2010-01-15 3 views
0

я написал этот сценарийкак выполнить команду после вызова ajax?

$.getJSON('<%=Url.Action("JsonSave","Controler")%>', 
      { id: newRow.Id, personId: newRow.PesronId}, 
      function(data) { 
       $('#grid').trigger('reloadGrid'); //{0} 
       $('#grid').editRow(rowCount); //{1} 
      }) 

, что я должен сделать так, чтобы {1} будет выполняться именно после {0}

+0

Разве это не выполняется в таком порядке? –

+0

нет его нет. Я предполагаю, что триггер является асинхронным – CoffeeCode

+0

@CoffeCode, надеюсь, что я не отправил вас на дикую погоню за гусями. Я провел некоторое исследование и обновил свой ответ. –

ответ

3

ОТВЕТ ОБНОВЛЕНО Я сделал небольшое исследование, и его похоже, вы используете jQuery Grid plugin. Он имеет обратный вызов под названием gridComplete, который должен делать то, что вам нужно. Объедините это с моим оригинальным ответом использовать one и вы будете все готово:

Поскольку события вызываются в порядке, вы можете добавить метод в очередь событий, как это:

$.getJSON('<%=Url.Action("JsonSave","Controler")%>', 
     { id: newRow.Id, personId: newRow.PesronId}, 
     function(data) { 
      $('#grid').one('gridComplete', function(){ $('#grid').editRow(rowCount); }); 
      $('#grid').trigger('reloadGrid'); 
     }) 

Использование one вместо из bind заставляет обратный вызов вашего события использоваться только один раз.

+0

спасибо за обновление, Я попробовал, но все равно никакого результата, im gettin realy confused – CoffeeCode

0

Возможны ли асинхронные вызовы trigger() и editRow()? Если это так, вам может быть не повезло сделать это так, как вы не знаете, когда они будут вызваны.

Если вы хотите, чтобы editRow() был вызван после завершения триггера(), сделайте вызов EditRow() в конце самой функции trigger().

1

ответ Дуга является правильным, за исключением случая, чтобы использовать это loadComplete

jQGrid documentation for events

+0

@Vinodh, из списка событий кажется, что 'loadComplete' срабатывает после запроса XHR, но до обновления Grid. Его вызов для редактирования строки завершился неудачно, потому что он будет обновлен после завершения события. 'gridComplete' является правильным событием AFAIK. –

+0

В моем опыте использования jqGrid я всегда видел 'loadComplete' выполнение после' gridComplete'. Не уверен в причине. Но для этой дискуссии я протестировал вызов 'editRow', и он работает независимо от того, помещен ли он в события' gridComplete' или 'loadComplete'. –

Смежные вопросы