2015-04-16 1 views
4

Я создаю супер простое приложение веб-сайта, которое вызывает API для получения данных обратной ссылки для любого веб-сайта, введенного пользователем в приложение. Данные, отправляемые API, включают строки (например, http://www.domain.com/?feed=rss) и номера и находятся в формате JSON. Я анализирую ответ следующим образом:Данные JSON принимаются в неполном формате в php?

mozResponse = JSON.parse(response); 

Я тогда перебирать эти данные, выдвигая только данные, которые я хочу в 2-х новых массивов (Arry, arry1), объявленный следующим образом:

arry = []; 
arry1 = []; 

Раздвигая, как следующим образом:

arry.push({id:i, url:mozResponse[i].uu, pa:Math.round(mozResponse[i].upa), da:Math.round(mozResponse[i].pda), anchor:mozResponse[i].lt}); 

Я тогда Stringify эти два массива следующим образом:

var cautionArrayString = JSON.stringify(arry); 
    var dangerArrayString = JSON.stringify(arry1); 

Я использую JavaScript XMLHTTPRequest для POST эти данные в файл PHP следующим образом:

var queryString = "email=" + Email + "&caution=" + cautionArrayString + "&danger=" + dangerArrayString; 
xhr1.onreadystatechange=Response1; 
xhr1.open("post","http://example.com/emails.php",true); 
xhr1.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
xhr1.send(queryString); 

Файл PHP затем читает:

$caution = $_POST['caution']; 
$danger = $_POST['danger']; 

Я знаю, в этот момент я должен расшифруйте JSON снова, после этого я закончил с разбитым массивом. Вот что console.log читает после размещения данных в файл PHP, с файлом PHP с помощью:

echo($_POST['caution']); 
echo ($_POST['danger']); 

console.log показывает:

[{"id":3,"url":"example.ca/","pa":26,"da":12,"anchor”:”Example”},  
{"id":4,"url":"example.ca/","pa":26,"da":12,"anchor":"thank you gifts"}, 
{"id":5,"url":"example.ca/","pa":26,"da":12,"anchor":"flowers"}, 
{"id":6,"url":"example.ca/","pa":26,"da":12,"anchor":"thank you"}, 
{"id":7,"url":"example.ca/","pa":26,"da":12,"anchor":"Arrive in Style"}, 
{"id":8,"url":"example.ca/","pa":26,"da":12,"anchor":"dignity"}, 
{"id":9,"url":"example.ca/","pa":26,"da":12,"anchor":"Beautiful in Blue"}, 
{"id":10,"url":"example.ca/","pa":26,"da":12,"anchor":"Blooming Garden Basket"}, 
{"id":11,"url":"example.ca/","pa":26,"da":12,"anchor":"Country Basket Blooms"}, 
{"id":12,"url":"example.ca/","pa":26,"da":12,"anchor":"Heart’s Delight"}, 
{"id":13,"url":"example.ca/","pa":26,"da":12,"anchor":"Make a Wish"}, 
{"id":14,"url":"example.ca/","pa":26,"da":12,"anchor":"Moondance"}, 
{"id":15,"url":"example.ca/","pa":26,"da":12,"anchor":"Queen’s Court"}, 
{"id":16,"url":"example.ca/","pa":26,"da":12,"anchor":"Sweet as Sugar"}, 
{"id":17,"url":"example.ca/","pa":26,"da":12,"anchor":"flower colors"}, 
{"id":18,"url":"example.ca/","pa":26,"da":12,"anchor":"Always Yours"}, 
{"id":19,"url":"example.ca/","pa":26,"da":12,"anchor":"Sunrise, Sunset"}, 
{"id":20,"url":"example.ca/","pa":26,"da":12,"anchor":"Uniquely Chic"}, 
{"id":21,"url":"example.com/best/index.php?page=1998","pa":25,"da":31,"anchor":"example.ca/"}, 
{"id":22,"url":"example.com/best/index.php?page=1994","pa":25,"da":31,"anchor":"example.ca/"}, 
{"id":23,"url":"example.ca/","pa":25,"da":16,"anchor”:”example”}, 
{"id":28,"url":"example.ca/article/156-best-cms-for-small-business","pa":22,"da":39,"anchor":"example.ca/"}, 
{"id":30,"url":"example.ca/blog.html","pa":21,"da":15,"anchor":"example.ca/"}, 
{"id":31,"url":"example.ca/beyond-the-flowers-choosing-a-vase/","pa":20,"da":12,"anchor”:”Example”}, 
{"id":32,"url":"example.ca/beyond-the-flowers-choosing-a-vase/","pa":20,"da":12,"anchor":"Arrive in Style"}, 
{"id":33,"url":"example.ca/beyond-the-flowers-choosing-a-vase/","pa":20,"da":12,"anchor":"Beautiful in Blue"}, 
{"id":34,"url":"example.ca/beyond-the-flowers-choosing-a-vase/","pa":20,"da":12,"anchor":"Blooming Garden Basket"}, 
{"id":35,"url":"example.ca/beyond-the-flowers-choosing-a-vase/","pa":20,"da":12,"anchor":"Country Basket Blooms"}, 
{"id":36,"url":"example.ca/beyond-the-flowers-choosing-a-vase/","pa":20,"da":12,"anchor":"Heart’s Delight"}, 
{"id":37,"url":"example.ca/beyond-the-flowers-choosing-a-vase/","pa":20,"da":12,"anchor":"Make a Wish"}, 
{"id":38,"url":"example.ca/gifts.html","pa":19,"da":11,"anchor”:”example- <span class=\"catlist\"> Flowers</span>"}, 
{"id":39,"url":"example.ca/category/flowers/","pa":19,"da":16,"anchor”:”Example”}, 
{"id":40,"url":"example.ca/category/floral-fauna/","pa":19,"da":16,"anchor”:”Example”}, 
{"id":41,"url":"nunavut.findstuffhere.ca/nunavut/?feed=rss2[] 

Где можно увидеть КОНЦЕ, что 1-й массив неполный, а второй пуст (как и должно быть!). Итак, мой вопрос здесь, что вызывает это и как я могу его исправить?

Вещи Примечание

  • Я использую 3 URL, в качестве входных данных для тестирования. Данные заполняются 1 URL-адресом, но 2 других (приведенный выше пример) возвращают этот неполный JSON, по-видимому, из-за того, что строка запроса является частью URL-адреса, возвращаемого API.
  • я console.log(mozResponse) и выход, как ожидалось
  • я console.log(arry) and console.log(arry1) ПОСЛЕ переборе mozResponse и толкая данные от mozResponse к Arry/arry1 и выход полным набором
  • Я console.log(arry) и console.log(arry1) после применения JSON.stringify, но ДО размещение в PHP и выход завершения

вещей я исследовал

  • Первоначально я думал, что это результат одного из URL-адресов, возвращаемых API , включая строку запроса (например, ?подача = RSS2, где он разрывы), однако до этого момента разрыва Есть строки запроса обрабатывается отлично
  • Не похоже, чтобы быть ошибка JSON, как я использовал json_last_error(); и он возвращается 0.
  • Кроме того, кажется, не будет аа JSON/POST предел гольца вещи, потому что она возвращает сломанный JSON, когда я входа другого URL (выход из $ _POST для этого URL также брейков следующих за строка запроса, не уверен, если это совпадение)
  • Suhosin нет
  • создал страницу phpinfo проверить max_vars но предел большой

Любая помощь очень ценится!

* различные цитаты из копии/вставки!

+2

я действительно не читал этот вопрос, но я заметил, что на первой линии есть другой тип кавычек: '[{«ID» : 3, "url": "example.ca/","pa":26,"da":12,"anchor":"Example"}, ' –

+0

Они из копирования вставки, как сказал @jeroen! Спасибо за указание это, хотя, я поправлю свой пост – nlw13

ответ

1

Вы, вероятно, просто нужно кодировать значения для использования в строке запроса:

var cautionArrayString = encodeURIComponent(JSON.stringify(arry)); 
var dangerArrayString = encodeURIComponent(JSON.stringify(arry1)); 

var queryString = "email=" + encodeURIComponent(Email) + "&caution=" + cautionArrayString + "&danger=" + dangerArrayString; 

преобразовав его в формат JSON автоматически не кодировать его правильно для использования в URL, так символы в значениях может разбить запрос строка.

Если предположить, что различные цитаты вызваны копией оклейки ...

+1

Святое дерьмо, спасибо за ваш четкий ответ. Все исправлено! Спасибо! – nlw13

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