2010-04-11 8 views
1

Voici mon jQuery:En utilisant jQuery pour analyser XML retourné à partir du script PHP (API imgur.com)

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

Notez que #doc est l'identifiant d'une zone de saisie de texte du formulaire et #submit est id de le bouton Envoyer . En cas de succès, je voudrais qu'un simple pop-up javascript "succès" apparaisse.

est ici img_upload.php avec ma clé API omis:

<?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); 
?> 

Lorsque l'on accède directement avec un argument GET pour "doc", fichier img_upload.php retourne le format XML suivant:

<?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> 

Quel est le problème ici? Voici le Imgur API page pour référence.

+1

Votre code semble correct. Qu'est-ce qui ne fonctionne pas? –

+1

"Quel est le problème ici?" - Exactement. Quel est le problème? Je suppose que "ça ne marche pas". Mais pouvez-vous être un peu plus précis? – VolkerK

+0

Je ne suis pas sûr de ce qui se passe, je ne pense même pas que l'AJAX tire, parce que lorsque je clique sur #submit la page se rafraîchit comme une page vierge. – vette982

Répondre

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

Exactement où est dans votre code et quand il sera évalué? Je suppose qu'il est exécuté lorsque le tag <script> a été analysé ou que vous l'avez enveloppé dans un gestionnaire $ (document) .ready(). Dans les deux cas, il est évalué avant que l'utilisateur n'ait tapé quelque chose dans le contrôle d'entrée/de texte et docname sera donc '' ou même nul tout le temps. Vous voulez que le script récupère la valeur jusqu'à ce que l'utilisateur ait appuyé sur le bouton de soumission.
Essayez avec

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

edit: Mieux encore, faire la propriété de données d'un objet et laissez-jquery gérer l'échappement de la valeur.

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

J'ai essayé de faire cette modification et d'ajouter l'en-tête ('Content-Type: text/xml'); à mon script PHP, mais cela ne fonctionne toujours pas – vette982

0

Il se peut que vous n'ayez pas défini l'en-tête dans le script php - cela devrait être votre première ligne.

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