Intereting Posts
Графический интерфейс трассировки Xdebug? Модель вызова CodeIgniter для просмотра? Использование PHP для получения элемента DOM # 2101: Строка, переданная в URLVariables.decode (), должна быть строкой запроса с URL-кодом, содержащей пары имя / значение Как сохранить строку JSON в MySQL db множественные действия с завиванием Woocommerce Mini Cart Widget цена продукта Как сгенерировать новый шаблон .pot из переведенного файла .po Как мне повторить попытку PHP flock () в течение определенного периода времени? Запрос для отображения группы строк столбцов данных по значению данных в JSON из php Составление АСТ обратно в исходный код Как написать байт по байту в сокет в PHP? PHP – выпадающее меню (выберите) не работает должным образом во время цикла Где я могу добавить вспомогательные функции Laravel 4, которые могут отображать флэш-сообщения? Как запустить php-функцию через определенное время без использования cron

Использование jQuery для синтаксического анализа XML, возвращаемого из PHP-скрипта (API imgur.com)

Вот мой jQuery:

var docname = $('#doc').val(); function parseXml(xml) { $(xml).find("rsp").each(function() { alert("success"); }); } $('#submit').click(function() { $.ajax({ type: "GET", url: "img_upload.php", data: "doc=" + docname, dataType: "xml", success: parseXml }); return false; }); 

Обратите внимание, что #doc – это идентификатор поля ввода текста формы, а #submit – это идентификатор кнопки отправки. В случае успеха я бы хотел, чтобы появилось простое «успешное» всплывающее окно javascript.

Вот img_upload.php с отсутствующим ключом API:

 <?php $filename = $_GET["doc"]; $handle = fopen($filename, "r"); $data = fread($handle, filesize($filename)); // $data is file data $pvars = array('image' => base64_encode($data), 'key' => <MY API KEY>); $timeout = 30; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://imgur.com/api/upload.xml'); curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $pvars); $xml = curl_exec($curl); curl_close ($curl); ?> 

При непосредственном доступе с аргументом GET для «doc» файл img_upload.php возвращает следующий формат XML:

 <?xml version="1.0" encoding="utf-8"?> <rsp stat="ok"> <image_hash>cxmHM</image_hash> <delete_hash>NNy6VNpiAA</delete_hash> <original_image>http://img.ruphp.com/php/cxmHM.png</original_image> <large_thumbnail>http://img.ruphp.com/php/cxmHMl.png</large_thumbnail> <small_thumbnail>http://img.ruphp.com/php/cxmHMs.png</small_thumbnail> <imgur_page>http://imgur.com/cxmHM</imgur_page> <delete_page>http://imgur.com/delete/NNy6VNpiAA</delete_page> </rsp> 

В чем проблема? Вот ссылка на страницу Imgur API для справки.

Solutions Collecting From Web of "Использование jQuery для синтаксического анализа XML, возвращаемого из PHP-скрипта (API imgur.com)"

 var docname = $('#doc').val(); 

Точно, где это в вашем коде и когда он будет оцениваться?
Я предполагаю, что он выполняется либо при анализе тега <script>, либо вы завернули его в обработчик $ (document) .ready (). В любом случае это будет оценено до того, как пользователь действительно набрал что-то во входной / текстовый элемент управления, поэтому имя docname будет «или равно нулю». Вы хотите, чтобы сценарий извлекал значение не до тех пор, пока пользователь не нажал кнопку отправки.
Попробуйте

 $('#submit').click(function() { $.ajax({ type: "GET", url: "img_upload.php", data: "doc=" + $('#doc').val(), dataType: "xml", success: parseXml }); return false; }); 

edit: Еще лучше сделать свойство данных объектом и позволить jquery обрабатывать escape-значение.

 data: {doc: $('#doc').val()} 

Возможно, вы не задали заголовок в скрипте php – это должна быть ваша первая строка.

 header('Content-Type: text/xml');