Вот мой 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 для справки.
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');