Я не вижу нигде в этом коде, где вы получаете доступ к свойству d
ответа.
Возможно, вы хотите это сделать?
$("#cartRow" + orderID).find(".subTotal").text(sTotal.d);
// --------------------------------------------------^^
EDIT
Хорошо, я вижу проблему. Вы возвращаете JSON, но не определяете dataType в вызове $.ajax()
. Это означает, что jQuery видит ваш application/json
mimetype и интерпретирует ответ как JSON. 128.00
в JSON - это число , а не строка . Однако "128.00"
будет строкой.
Чтобы это работало, вам нужно отформатировать ответ перед его печатью (как предлагали другие) или настроить конечную точку так, чтобы она возвращала действительную строку JSON .
Вот мой тест, чтобы доказать решение
<div id="test">
Subtotal <span class="subTotal"></span>
</div>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript" charset="utf-8">
google.load("jquery", "1.4.2");
</script>
<script type="text/javascript" charset="utf-8">
$.ajax({
url: 'test.php',
data: {},
success: function(sTotal) {
//order was updated: set span to new sub-total
$("#test").find(".subTotal").text(sTotal);
}
});
</script>
и test.php
<?php
header( 'Content-type: application/json' );
echo '128.00';
выход
Итого 128
Но когда я изменяю test.php на это
<?php
header( 'Content-type: application/json' );
echo '"128.00"';
Ожидаемый результат генерируется
Итого 128,00
Или вы можете указать jQuery обрабатывать ответ как текст, указав параметр dataType , например
$.ajax({
url: 'test.php',
data: {},
dataType: 'text', // <---- here
success: function(sTotal) {
//order was updated: set span to new sub-total
$("#test").find(".subTotal").text(sTotal);
}
});
РЕДАКТИРОВАТЬ 2
Хорошо, после того, как я еще немного поиграюсь с этим, я увижу, что происходит. Определенный вами обработчик dataFilter преобразует ответ в сам JSON и в этом случае возвращает строку 128.00
. Тем не менее, , jQuery по-прежнему применяет к значению, предполагаемому целым числом (который является JSON), перед отправкой его обработчику успеха.
Существует множество способов исправить это, каждый из которых зависит от того, для чего другие приложения AJAX называют ваше приложение, полагаясь на эту настройку. Быстрое исправление, которое я применил в своем тесте, состояло в том, чтобы сделать это
$.ajaxSetup({
type: "POST",
contentType: "application/json; charset=utf-8",
data: "{}",
// define the text data type so that we return data.d, jQuery doesn't parse it as JSON again
dataType: 'text',
dataFilter: function(data) {
data = $.parseJSON( data ); // Use jQuery's parsing
if (data.hasOwnProperty('d'))
{
return data.d;
}else{
return data;
}
}
});
Но это может не сработать для вас по всем направлениям