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

Вот мой 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://imgur.com/cxmHM.png</original_image>
        <large_thumbnail>http://imgur.com/cxmHMl.png</large_thumbnail>
        <small_thumbnail>http://imgur.com/cxmHMs.png</small_thumbnail>
        <imgur_page>http://imgur.com/cxmHM</imgur_page>
        <delete_page>http://imgur.com/delete/NNy6VNpiAA</delete_page>
</rsp>

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

Ответы [ 2 ]

1 голос
/ 11 апреля 2010
var docname =  $('#doc').val();

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

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

edit: еще лучше, сделайте свойство data объектом и позвольте jquery обрабатывать экранирование значения.

data: {doc: $('#doc').val()}
0 голосов
/ 11 апреля 2010

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

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