2009-05-30 21 views
3

Je souhaite envoyer un paramètre au service Web. Le paramètre doit être une variable et non une chaîne fixe. Lorsque j'écris le code suivant, le service web s'appelle bien et est exécuté parfaitement. Mais quand je change la ligne à la suivante où x est une variable, cela ne fonctionne pas. Pouvez-vous me dire comment passer une variable au webservice dans le code suivant.

data:"{'url':x}", 

Répondre

3

Vous étiez vraiment proche. Ne placez pas votre valeur de l'élément de données entre guillemets-à-dire:

$(function() { 
    var dynamic_url = "http://www.example.com"; 
    $.ajax({ 
    type: "POST", 
    url: "JsonTestService.asmx/Test", 
    data: { 
     url: dynamic_url 
    }, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     alert(msg.d); 
    } 
    }); 
});` 

En enfermant le tout entre guillemets l'expression simple n'a pas été évaluée. Je conseillerais aussi d'utiliser la syntaxe des deux pour passer des objets. Je pense que c'est plus clair.

+1

Depuis qu'il utilise un ASP.NET AJAX « ScriptService ", en citant le paramètre de données entier est requis. ASP.NET attend une chaîne JSON en tant que paramètre, pas de variables POST. –

+0

@Dave: jQuery code-t-il l'objet de données en tant que paramètre de formulaire même si vous spécifiez que dataType est 'json' de telle sorte qu'ASP.NET ne peut vraiment pas le reconnaître? – cletus

+0

C'est le cas. Semi-connexe: jQuery n'honorera pas non plus le paramètre contentType sauf s'il existe un paramètre data. Ainsi, les appels en lecture seule aux services ASMX doivent être effectués avec un paramètre de données "vide" de "{}". –

1

Ce qui suit devrait fonctionner:

$(document).ready(function() { 
    var x = 'http://www.cramster.com'; 

    $.ajax({ 
     type: "POST", 
     url: "JsonTestService.asmx/Test", 
     data: { 'url': x }, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
      alert(msg.d); 
     } 
    }); 
}) 

Vous avez besoin de perdre les guillemets autour de votre paramètre data.

+0

J'ai essayé les deux façons. Mais aucun d'entre eux travaille toujours –

+1

$ (document) .ready (function() {var x = 'http://www.cram.com'; .ajax $ ({type : "POST", url: "JsonTestService.asmx/Test", data: "{'url': '" + x + "'}", contentType: "application/json; jeu de caractères = utf-8", dataType: "json", succès: fonction (msg) { alerte (msg.ré); } }); }); fonctionne parfait Merci pour toute l'aide –

+0

Essayez ceci: var x = "{ 'url': 'http: //www.cramster.com'}" ... données: x .... Cela devrait envoyer exactement la même chose au serveur que votre version statique. – Frans

2

La raison pour laquelle vous devez citer la chaîne entière de JSON:

Dans les demandes qui leur sont faites, les services de script ASP.NET AJAX et les méthodes de page à comprendre et à attendre les paramètres sérialisé sous forme de chaînes JSON. Ces paramètres sont analysés à partir des données POST et utilisés comme arguments pour la méthode que vous avez appelée. Toutefois, si vous fournissez directement un objet JSON en tant que paramètre de données pour un appel $ .ajax, jQuery sérialisera l'objet en une série de paires k, v à POST au lieu de passer le JSON brut à votre service Web. .

Plus de détails sont disponibles dans this post on common pitfalls when using jQuery with ASP.NET AJAX web services and page methods, si cela vous intéresse. Vous pouvez également être intéressé par using a stringify method to make constructing the JSON string much cleaner.

1

Il est correct d'avoir le JSON sous forme de chaîne par les jquery docs, la solution évidente pour obtenir la valeur de x en elle est à faire:

data:"{\"url\":\"" + x + "\"}", 
+0

Ne faites pas cela, vous casserez le JSON. – alamar

+1

Je n'arrive pas à voir comment c'est le JSON, mais bien sûr, si vous pouvez utiliser une méthode stringify qui serait mieux, mais c'est encore un autre javascript à inclure alors sur la page. – PQW

Questions connexes