2014-02-11 3 views
0

Я застрял на этом. Я думаю, что это должно быть просто, но у меня нет успеха. Я просто пытаюсь опубликовать переменную в теге href поверх функции php в отдельном файле. Я пытаюсь проверить свой JS с предупреждающим полем на успех. Я не получаю предупреждающий ящик, «Тест окна проверки работоспособности!».JS Сообщение на Php Вопрос

Любая идея, что я делаю неправильно? Я предполагаю, что это проблема с моей функцией успеха.

Еще раз спасибо! Очень признателен.

HTML:

<a href="#" class="target" data-review="1">Click here</a> 

JS:

$(document).ready(function() { 
    $(".target").click(function(e) { 
     e.preventDefault(); 
     var review_id = this.data('review'); 
     $.ajax({ 
      url : "vote_add.php", 
      type : "POST", 
      dataType: "json", 
      data : { 
       reviewId : review_id 
      }, 
      success : function(data) { 
       if (data == 'success') { 
        alert('Success alert box test!'); 
       } else { 
        alert(data);  
       } 
      } 
     }); 
    }); 
}); 

Vote_add.php:

<?php 

echo "success"; 


?> 
+0

Используйте консоль разработчика вашего браузера, чтобы узнать, что возвратит запрос. Существует также функция обработки сбоев с использованием jQuery ajax, а также успех, который можно использовать для отладки вашего приложения. Чтобы сократить ваши проблемы, вы не вернули правильный json из php. –

+3

'Vote_add.php! = Vote_add.php' –

+0

Я не уверен, что это проблема, но я не думаю, что вы правильно используете данные. Я думаю, вы хотите 'this.attr ('data-review')'. Если это не исправить, не могли бы вы рассказать нам, если вы получаете какие-либо ошибки в консоли JS? – acbabis

ответ

0
$(document).ready(function() { 
$(".target").click(function(e) { 
     e.preventDefault(); 

     var review_id = $(this).data('review'); 
     $.ajax({ 
      url : "/echo/json/", 
      type : "POST", 
      dataType: "json", 
      data : { 
       reviewId : review_id 
      }, 
      success : function(data, status) { 
       if (status == 'success') { 
        alert('Success alert box test!'); 
       } else { 
        alert(data);  
       } 
      } 

      }); 

}); 
}); 

У вас есть ошибка на линии 5 this должна быть $(this) - объективистские JQuery t, а также вы должны использовать 2-й параметр для success, который составляет status.

Для упрощения отладки используйте FireBug или DevTools.

0

Пару вещей, чтобы улучшить свой код и мой опыт, что я считаю, вы должны изменить:

  • $(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 
     }); 
    }); 
}); 
Смежные вопросы