2014-10-23 4 views
0

Я следующий код, который генерирует ответ успеха:Как вернуть значение динамического объектов JavaScript из ответа Ajax

<form method="post" action="/action/"> 
<script> 
var = dynVal = "1"; 
</script> 
<input type="submit"> 
</form> 
<script> 
$("form").live("submit", function() { 
    $.ajax({ 
    type: $(this).attr('method'), 
    url: $(this).attr('action'), 
    data: $(this).serialize(), 
    success: function(data) { 
    console.log('woohoo, this works! '); 
    var newSummary = $(data).find("form"); 
    $("form").remove(); 
    $(".wrapper").prepend(newSummary); 
    } 
    }); 
    return false; 

}); 
</script> 

Ответ:

<form method="post" action="/action/"> 
<script> 
var = dynVal = "2"; 
</script> 
<input type="submit"> 
</form> 

Если значение dynVal является приращение/обновление после публикации формы.

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

Должен ли я лучше определить область обратного вызова? Что я делаю не так?

+0

Вы пытаетесь заменить текущую форму? Вы можете сделать '$ form.replaceWith ($ (data) .find ('form'))'. Вам просто нужно сохранить ссылку на форму. Кроме того, '.live()' устарел. – George

+0

Можете ли вы показать пример того, как выглядят данные ответа? –

+0

Я понимаю, что жизнь устарела, но мы используем устаревшую фреймворк – designmode

ответ

0
<form method="post" action="/action/"> 
    // stuff... use a real html comment though (>.> 
<input type="submit"> 
</form> 
<div id="someotherelement" style="display: none;"></div> 
<script> 
var = dynVal = "1"; 
$("form").live("submit", function() { 
    var _this = $(this); 
    $.ajax({ 
    type: _this.attr('method'), 
    url: _this.attr('action'), 
    data: _this.serialize(), 
    success: function(data) { 
    console.log('woohoo, this works! '); 
     $('#someotherelement').html(data); 
    var newSummary = $('#someotherelement').find("form"); 
    _this.remove(); 
    $(".wrapper").prepend(newSummary); 

    $('#someotherelement').empty(); // or .html(' ') 

    dynVal += 1; // this addresses your update variable option. Just make it a global scope and update it everytime there is a successful interaction. Or you can do a check if something occurs or you find a successful update, but updating global scope vs always replacing script is better. I don't even know if script executes the way you are trying to tbh. 
    } 
    }); 
    return false; 

}); 
</script> 

Это должно работать для вас ... Используйте другое имя для #someotherelement или нет. А затем также вы можете установить всю переменную $('#someotherelement') и использовать ее вместо этого, что сделало бы это намного лучше. Я просто хотел подчеркнуть, что вам нужно делать это во многих областях.

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

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