Пару вещей, чтобы улучшить свой код и мой опыт, что я считаю, вы должны изменить:
$(this).data('review')
должен работать.
.data()
Метод позволяет прикрепить данные любого типа к элементам DOM в пути, который является безопасным из циклических ссылок и, следовательно, от утечек памяти.
По JQuery 1.6, метод .prop() обеспечивает способ явно извлекать значения свойств, в то время как .attr() возвращает атрибуты.
- обратного вызова функций на $.ajax() опции вы предоставляете должны быть как
.done()
, .fail()
, .always()
и .then()
jqXHR объектов возвращаемый $.ajax()
от JQuery 1.5 реализуют интерфейс Promise, давая им все свойства, методы и поведение Promise.
Deprecation Примечание: jqXHR.success(), jqXHR.error(), и jqXHR.complete() обратного вызова нежелателен из JQuery 1.8.
- В зависимости от способа вашего веб-службы была установка, вы должны быть в состоянии установить точку останова в коде сервера (я предполагаю, что у вас есть доступ к нему или построили его сами?).Если это невозможно, проверьте
data
объект, возвращаемый .fail()
с Firebug или любой другой панели инструментов для разработчиков и искать xhr.statusText
или xhr[0].statusText
(опять же, в зависимости от того, как веб-сервис возвращает его.)
Success: Тип: Функция (данные PlainObject, String textStatus, jqXHR jqXHR) Функция, вызываемая при успешном выполнении запроса. Функция получает три аргумента: данные, возвращаемые с сервера, отформатированные в соответствии с параметром dataType; строка, описывающая статус; и объект jqXHR (в jQuery 1.4.x, XMLHttpRequest).
jqXHR.done (function, dataStatus, jqXHR) {}); Альтернативная конструкция для опции обратного вызова успеха, метод .done() заменяет устаревший метод jqXHR.success().
Если вы используете «POST» на веб-службы, которую вы могли бы хотеть, чтобы отправить его в виде строки JSON. JSON.stringify()
может помочь с этим. Некоторая поддержка браузера не существует, но вы можете исправить это с помощью polyfill
И последнее, но не менее важное: если вы отправляете json, вы хотите ожидать, что json вернется. <? echo "success" ?>
не собирается его резать. Боюсь. Отъезд this post, чтобы посмотреть, что я имею в виду.
Тип JSON разбирает извлеченный файл данных как объект JavaScript и возвращает объект, построенный в качестве результирующих данных. Для этого он использует jQuery.parseJSON(), когда браузер поддерживает его; в противном случае он использует конструктор Function. Неправильные данные JSON вызовут ошибку синтаксического анализа (см. Json.org для получения дополнительной информации). Данные JSON удобны для передачи структурированных данных способом, который является кратким и легким для анализа JavaScript. Если выбранный файл данных существует на удаленном сервере, укажите вместо этого тип jsonp.
.
$(function() {
var ajaxOptions = {
url: "vote_add.php",
type: "POST",
dataType: "json"
};
$(".target").click(function (e) {
var options,
optionsData = {
reviewId: $(this).data('review')
};
e.preventDefault();
//options = $.extend({}, ajaxOptions, { data: optionsData });
options = $.extend({}, ajaxOptions, { data: JSON.stringify(optionsData) });
$.ajax(options).done(function (data) {
// success so use your data object
// are you looking for a property?
var myProperty = 'myProperty';
if (data.hasOwnProperty(myProperty)){
var myValue = data[myProperty];
}
}).fail(function (xhr) {
// do something on error
console.warn("myscript.js > " + xhr.statusText + ' ' + xhr.status);
}).always(function() {
// do something no matter what happens
});
});
});
Используйте консоль разработчика вашего браузера, чтобы узнать, что возвратит запрос. Существует также функция обработки сбоев с использованием jQuery ajax, а также успех, который можно использовать для отладки вашего приложения. Чтобы сократить ваши проблемы, вы не вернули правильный json из php. –
'Vote_add.php! = Vote_add.php' –
Я не уверен, что это проблема, но я не думаю, что вы правильно используете данные. Я думаю, вы хотите 'this.attr ('data-review')'. Если это не исправить, не могли бы вы рассказать нам, если вы получаете какие-либо ошибки в консоли JS? – acbabis