2010-12-12 7 views
0

J'envoie une date à mon service Web dans ce format: 12/14/2010, mais le caractère "/" provoque la valeur affichée à quelque chose comme 0,0323483238432834. Comment envoyer la date dans ce format? Heres le code ajax que j'utilise:Problème avec les paramètres jQuery ajax

function createNewPromo() { 
      var a = $("#txtDateStart").val(); 
      var b = $("#txtDateEnd").val(); 
      $.ajax({ 
       type: "POST", 
       url: "/WebService_VehicleDisplay.asmx/createNewPromo", 
       data: "{startDate:" + a + "," + "endDate:" + b + "}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (msg) { 
        var response = msg.d; 

       }, 
       failure: function (msg) { 
        alert('failure'); 
       } 
      }); 
     } 

Modifier: voici ce que firebug dit. endDate/startDate sont mes paramètres (c'est ce qui est posté sur mon service web.).

JSON 

endDate 
    0.00021321961620469082 

startDate 
    0.00028429282160625445 
Source 
{startDate:12/21/2010,endDate:12/28/2010} 
+1

Etes-vous sûr qu'il est posté de cette façon plutôt qu'interprété comme cela sur le webservice? Pouvez-vous poster votre code webservice? Pouvez-vous montrer une décharge de la demande? – Oded

+0

J'utilise firebug, il montre la source (dates dans les zones de texte) mais montre ensuite que json envoie la date comme un groupe de nombres. –

+0

Pouvez-vous poster le texte intégral de la demande de firebug? –

Répondre

3

I figured it out, il doit y avoir une seule citation de chaque côté de la valeur du paramètre comme:

data: "{startDate:'"+ a +"',endDate:'"+ b +"'}" 

J'ai inclus un excellent article dans mon commentaire ci-dessous à propos de ce problème. "De nouveau, n'oubliez pas qu'un Content-Type d'application/json est requis lorsque vous utilisez ASMX ScriptServices.En réglant Content-Type sur la requête, vous vous êtes engagé à envoyer du JSON. paramètres sérialisés, et une chaîne codée URL est loin de JSON valide. "

+0

Hmm ... intéressant. Je ne vois aucune mention d'un besoin de '' 'sur les documents jQuery. – matthewpavkov

+1

@metthewpavkov, il y a quelques stipulations à ce sujet. Vous n'en avez pas besoin pour les chaînes normales, mais s'il y a des opérateurs arithmatiques dans la chaîne, cela va essayer de l'évaluer. L'URL suivante approfondit ce problème et fait ressortir comment la documentation de jQuery est subtile à propos de la syntaxe: http://encosia.com/2010/05/31/asmx-scriptservice-mistake-invalid-json-primitive/ –

0

Utilisez encodeURIComponent() sur la chaîne.

+0

qui ne fonctionne pas. –

+0

Si vous lisez le lien que vous m'avez donné, il est écrit "Cette fonction encode les caractères spéciaux, à l'exception de: * @ - _ +. /". –

+0

@nick Oups. Vous pouvez essayer 'encoderURIComponent()'. Aussi, si vous faites un 'alert (a + b)' avant votre ajax, obtenez-vous les bonnes dates? – matthewpavkov

0

la docs jQuery dit:

Par défaut, les données transmises dans les données options comme un objet (techniquement, un autre chose qu'une chaîne) sera traité et transformé en une chaîne de requête , correspondant à la valeur par défaut type de contenu "application/x-www-form-urlencoded".

Donc, vous devez sérialiser manuellement les données que JSON si vous souhaitez l'envoyer en JSON (en utilisant json.org ou similaire)

var data = {param1: 'value1', param2: 'value2', paramArray: ['a','b','c']}; 
$.ajax({ 
    ... 
    data: JSON.stringify(data), // using json.org 
    ... 
}); 
+0

Je suis confus, c'est comme ça que je gère les paramètres. Sauf que votre syntaxe est fausse, leur doit être des citations après des données comme comment je l'ai. –

+0

@nick désolé, j'ai mal compris votre question, a corrigé ma réponse. – m0sa