2010-04-11 33 views
1

这里是我的jQuery:使用jQuery解析XML从PHP脚本返回(imgur.com API)

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” 一个获取参数的直接访问,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 page供参考。

+1

你的代码似乎很好。什么是不工作? – 2010-04-11 10:22:46

+1

“这里有什么问题?” - 确实如此。问题是什么?我假设“这不工作”。但你能更具体一点吗? – VolkerK 2010-04-11 10:30:29

+0

我不确定发生了什么事,我甚至不认为AJAX正在发射,因为当我点击#提交页面刷新为空白页面时。 – vette982 2010-04-11 19:18:07

回答

1
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; 
}); 

编辑尝试:更妙的是,使数据属性的对象,让jQuery的处理值的转义。

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

我试着做这个改变并添加标题('Content-Type:text/xml');到我的PHP脚本,但它仍然无法正常工作 – vette982 2010-04-11 19:17:32

0

这可能是因为你没有在PHP脚本中设置标题 - 这应该是你的第一行。

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