Вызов jQuery AJAX возвращает [объект Object]
Я работаю над исправлением jQuery для Exchange на веб-сайте.
EDIT: он обновляет ID/CLASS или входное значение на веб-странице в зависимости от возвращаемого значения.
index.php:
<!doctype html>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<meta charset="utf-8">
<title>load demo</title>
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
url: '/datacall/demo.json',
dataType: 'json',
success: function( resp ) {
$( '#div' ).val( resp.currency[0].amount );
},
error: function( req, status, err ) {
console.log( 'Something went wrong', status, err );
}
});
var end = parseInt($('#value').val());
var newend = parseInt($('#div').val());
var result = $( end * newend );
$('#clickme').click(function() {
$('#new').val( result );
});
});
</script>
<div>
<input type="hidden" value="2500" id="value" />
<input type="hidden" value="" id="div">
<input type="text" id="new" value="" readonly/>
<input type="button" value="Change" id="clickme" />
</div>
В настоящее время он возвращается:
[object Object]
Я также попытался вернуть его в div с .text()
demo.json:
{ "currency" : [
{
"name" : "South Africa",
"code" : "ZAR",
"amount" : 0.14
},
{
"name" : "America",
"code" : "USD",
"amount" : 0.64
},
{
"name" : "Europe",
"code" : "GBP",
"amount" : 1.29
}
] }
Пожалуйста, кто-нибудь скажет мне, что я сделал неправильно.
Спасибо заранее!
Ответы
Ответ 1
Вы можете сделать это:
// Create some global variables
var end = parseInt($('#value').val(), 10);
var newend = 0;
var result = 0;
$.ajax({
url: '/datacall/demo.json',
dataType: 'json',
success: function (resp) {
// Check the values in console
console.log(resp.currency[0].amount);
console.log(resp.d.currency[0].amount);
$('#div').val(resp.currency[0].amount);
newend = parseInt(resp.currency[0].amount, 10);
result = end * newend;
// No need to create a new jQuery object using $()
// result = $( end * newend );
},
error: function (req, status, err) {
console.log('Something went wrong', status, err);
}
});
$('#clickme').click(function () {
$('#new').val(result);
});
Итак, основные проблемы здесь: -
- Вам нужно сделать все логику
result
в обратном вызове ajax, так как ajax asynchronous
, и вы всегда получаете пустые значения для переменных end
и newend
.
- Не нужно делать это
result = $( end * newend );
, поскольку он создает новый экземпляр объекта jQuery и, следовательно, вы получаете [object Object]
Ответ 2
[object Object] - это в основном массив
Попробуйте этот код:
success: function( resp ) {
//$( '#div' ).val( resp.currency[0].amount );
alert(JSON.stringify(resp));
},
Это должно показать вам массив, который даст вам возможность лучше выбирать элементы для вывода
Ответ 3
Вы вычисляете продукт внутри $()
var end = parseInt($('#value').val());
var newend = parseInt($('#div').val());
var result = end * newend; // this $(end * newend) is probably what was wrong
Ответ 4
Этот код
var end = parseInt($('#value').val());
var newend = parseInt($('#div').val());
var result = $( end * newend );
оценивается до успеха вызова ajax. его необходимо перенести в блок успеха
Ответ 5
используйте цикл for, как этот код:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$( "select[name='continue[matiere]']" ).change(function () {
var matiereID = $(this).val();
if(matiereID) {
$.ajax({
url: "{{ path('ajaxform') }}",
dataType: 'Json',
data: {'id':matiereID},
type:'POST',
success: function(data) {
$('select[name="continue[chapitre]"]').empty();
for(i = 0; i < data.length; i++) {
student = data[i];
$('select[name="continue[chapitre]"]').append('<option value="'+ student['id'] +'">'+ student['nom'] +'</option>');
};
}
});
}else{
$('select[name="continue[chapitre]"]').empty();
}
});
</script>