У меня этот код http://jsfiddle.net/meridius/ysDGm/ где проблема с out.id
переменная в append
часть. По причинам, которые я не могу объяснить, эта переменная пуста в этой части.глобальная переменная пуста внутри функции
Я думаю, что проблема связана с областью этой переменной, и я пробовал все, но не повезло. Обратите внимание, что проблема не с AJAX, это нормально!
Вот сокращенный вариант этого Fiddle:
<tr>
<td>one</td>
<td>
<select name="zadavatel">
<option value="0">-- vyberte --</option>
<option value="new">-- nový zadavatel --</option>
</select>
</td>
</tr>
var out = {};
$('select').bind("change", function() {
if ($(this).val() == "new") {
var nazev = prompt('Question',
$(this).parent().siblings(':first-child').text());
if (nazev == null) {
$(this).val($.data(this, 'current'));
return false;
} else {
var pole2 = {};
pole2["nazev"] = nazev;
$.ajax({
type : "POST",
cache : false,
url : "./pokus_zad.php",
data : JSON.stringify(pole2),
success : function(data) {
out = JSON.parse(data); //data.id
}
});
out.id = 15; // this work, but it SHOULD work without it (with AJAX)
$(this).closest('table').find('select').each(
function() {
$(this).append($('<option>', { "value" : out.id }).text(nazev));
});
$(this).closest('select').val(out.id).attr('selected', 'selected');
}
}
$.data(this, 'current', $(this).val());
});
Поиск "возврат Jquery значение Аякса". Вы найдете достаточно дубликатов. Причина очень проста: * значение переменной [global] не было установлено в той точке, в которой оно используется *. Это все. –
http://stackoverflow.com/questions/560307/how-do-i-itit-a-global-variable-in-a-jquery-each-function?rq=1, http://stackoverflow.com/questions/6917796/extjs-return-ajax-return-value, http://stackoverflow.com/questions/8532082/return-value-of-post-call, http://stackoverflow.com/questions/31129/how-can -i-return-a-variable-from-a-getjson-function? rq = 1, http://stackoverflow.com/questions/1632039/return-value-from-ajax-call, http://stackoverflow.com/questions/1181665/is-there-a-way-to-return-a-value-xml-in-my-case-from-a-jquery-ajax-call? rq = 1 –
AJAX является асинхронным, поэтому поток кода продолжается, пока выполняется вызов ajax. Вы пытаетесь использовать переменную 'out', прежде чем она будет установлена. Попробуйте переместить код после вашего вызова ajax в обратный вызов успеха. – MrOBrian