1

这是我的 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 是表单文本输入框的 id,#submit 是提交按钮的 id。如果成功,我希望出现一个简单的“成功”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);
?>

当使用“doc”的 GET 参数直接访问时,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 页面供参考。

4

2 回答 2

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

这在您的代码中的确切位置以及何时评估?
我的猜测是,当 <script> 标记已被解析或您将其包装在 $(document).ready() 处理程序中时,它就会执行。无论哪种方式,在用户实际在输入/文本控件中输入内容之前都会对其进行评估,docname因此将始终为 '' 或什至为 null。您希望脚本在用户按下提交按钮之前获取值。
试试看

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

编辑:更好的是,将数据属性设为对象并让 jquery 处理值的转义。

data: {doc: $('#doc').val()}
于 2010-04-11T10:33:55.730 回答
0

可能是您没有在 php 脚本中设置标题 - 这应该是您的第一行。

header('Content-Type: text/xml');
于 2010-04-11T10:31:57.963 回答