2011-12-13 6 views
0

J'essaie d'appeler un service Web .NET, à partir de javascript, qui renvoie un document XML. Le service Web est situé sur un serveur Web différent de mon application. Je n'ai aucun contrôle sur le service Web. J'ai appelé avec succès le service en utilisant jQuery en réglant le dataType sur jsonp et je peux voir que le document XML est retourné dans Firebug. Cependant, j'obtiens une erreur dans la console Firebug "missing, before statement" où il semble que l'on essaye d'analyser le xml renvoyé (à json peut-être ??). Des idées ou quelle est la meilleure façon d'appeler un service Web inter-domaine qui renvoie xml? Merci beaucoup!Appel de service Web inter-domaine Javascript

+0

Vous ne pouvez pas utiliser jsonp avec XML. Vous devrez utiliser un proxy sur le serveur. – evan

Répondre

0

someting comme ceci:

 
$.getJSON("http://yoursite.com/xml2json.php?callback=?", 
    {feed:"http://agency.nd.edu/agencynd-team.xml"}, 
    function(data) { 
     // process data here 
    } 
}); 

<?php 
header('content-type: application/json; charset=utf-8'); 

if(strlen($_GET["feed"]) > 13) { 
    $xml = file_get_contents(urldecode($_GET["feed"])); 
    if($xml) { 
    $data = @simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA); 
    $json = json_encode($data); 

    echo isset($_GET["callback"]) ? "{$_GET[’callback’]}($json)" : $json; 
    } 
} 
?> 
1

Le format de données JSON-P est un programme JavaScript. Si vous utilisez JSON-P, les données que vous récupérez doivent être JavaScript.

JSON-P fonctionne en chargeant le document à l'aide d'un élément <script> (et qui ne va jamais travailler pour les données XML arbitraires)

Vos options sont:

  1. Persuadez quiconque fait contrôler le service Web pour vous donner une interface JSON-P
  2. Persuadez quiconque ne contrôle le service Web pour accorder votre autorisation de site pour y accéder via CORS (note limited browser support)
  3. Proxy nous la b service à travers votre propre serveur afin que votre JS fonctionne sur le same origin
0

Si vous définissez dataType vous jsonp devriez obtenir une réponse enveloppé dans l'appel de fonction. Par exemple, si vous vous attendez à obtenir

object {"key": "value"} 

la réponse pour jsonp devrait être

parseRespone({"key":"value"}); 

La raison est que jsonp ajoute la balise <script> à votre tête de page il devrait donc ajouter le code javascript valide Là.

Si vous n'avez aucune possibilité de contacter les développeurs du serveur, je suggère de faire un appel ajax à votre page où la page ferait une connexion curl au serveur .NET et récupèrerait la réponse en json pur.

0

Une possibilité est d'éviter l'utilisation de JSON et d'utiliser à la place cURL et un proxy PHP. Envoyez les données à un script PHP sur votre serveur, qui forme ensuite une session cURL avec le script sur l'autre domaine et renvoie le résultat à l'appelant AJAX d'origine.