2013-07-21 1 views
2

Я пытаюсь написать страницу, которая берет RSS-канал с новостного сайта через AJAX, а затем отправляет его на PHP, где я могу работать с ним. Канал новостей возвращается как массив объектов. Я пробовал разместить его как есть, а также как строку json. Метод post кажется успешным, но PHP дает неопределенное уведомление об индексе. Это мой первый опыт использования AJAX и PHP, и у меня, похоже, проблема с получением данных со стороны PHP.Получение строки json в php из jquery ajax post

Ошибка:

Notice: Undefined index: data in ...\index.php on line 33 

Текущий код выглядит следующим образом:

АЯКС стороне

url = 'http://feeds.bbci.co.uk/news/rss.xml?edition=int'; 

$.ajax({ 
    type: "GET", 
    url: document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=1000&callback=?&q=' + encodeURIComponent(url), 
    dataType: 'json', 
    error: function(){ 
      alert('LOAD ERROR, INVALID URL'); 
    }, 
    success: function(xml){ 
      values = xml.responseData.feed.entries; 
      var senddata = JSON.stringify(values); 
      console.log(senddata); 
      $.ajax({ 
       type: "POST", 
       url: "index.php", 
       data: {data : senddata}, 
       success: function(){ 
        alert("postdone!"); 
       }, 
       error: function(){ 
        alert("posterror!") 
       } 
      }); 
     } 
}); 

стороне PHP

<?php 
    $data = json_decode(stripslashes($_POST['data'])); 
    echo $data;   
?> 
+0

Никогда не замечал, что вложенный аякс. «Console.log (senddata);« возвращает что-нибудь? –

+0

Два предложения: во-первых, переименуйте данные параметра в другое. Возможно, существует некоторая путаница, поскольку имя параметра совпадает с именем ключа .ajax. Во-вторых, дамп содержимого '$ _POST' (' var_dump ($ _ POST'); '), чтобы увидеть, что он содержит. Ваши данные там, возможно, в том месте, которого вы не ожидали? –

ответ

2

обернуть код в if, чтобы избежать этого предупреждения:

if (isset($_POST['data'])) { 
    $data = json_decode(stripslashes($_POST['data'])); 
    echo $data; 
} 

Проблема заключается в том, когда вы посещаете, что index.php из браузера, нет запроса POST нет, поэтому, конечно, $_POST пуст и $_POST['data'] не установлен.

Упование вы получаете пункт.

EDIT:

Хм, я не вижу ничего, что серьезно неправильно. И на самом деле сейчас я рекомендую вам использовать php.net/manual/en/book.curl.php для получения данных непосредственно из RSS, вместо того, чтобы вставлять 2 вызова ajax.

+1

Спасибо за ответ! Не уверен, что я понял. Условие if просто игнорирует предупреждение. Я вижу через консольный журнал, что AJAX GET завершен, и я также получаю предупреждение о том, что AJAX POST завершен. Я предполагаю, что мой вопрос в двух словах будет: как я могу получить newsitems (значения OR senddata) из RSS в PHP, поэтому я могу работать с ними (поместить определенные атрибуты в базу данных и т. Д.)? – Reins

+0

Итак, оба ajax успешно отправлены. Вы можете сделать var_dump ($ _ POST); в части PHP для отладки вашего вызова. –

+0

var_dump ($ _ POST) возвращает массив (0) {} Итак, я предполагаю, что проблема заключается в том, что я отправляю пустой массив, следовательно, что-то не так с методом ajax POST? console.log (senddata), который находится перед ajax POST, возвращает мне массив пар ключ: значение, которые, безусловно, присутствуют. Любые идеи, что может быть неправильным с методом POST? – Reins

Смежные вопросы