2010-04-11 59 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');