Comment passer dynamicment un paramètre de données dans un appel jquery ajax (plusieurs tableaux de données)

J’ai ce code ajax:

return $.ajax({ type: "POST", url: "somefile.php", cache:false, data: { "yfilter": $("#yearFilter").serializeArray(), "gfilter": $("#genreFilter").serializeArray() }, dataType:"json", success: function(data){ alert("success"); } 

Cela fonctionne bien, mais je dois passer le paramètre data dynamicment. Pour l’instant, j’ai besoin du contenu du paramètre de données ci-dessus et d’une seule chaîne.

Comment est-ce que je passe ceci dynamicment? / Comment puis-je le stocker dans une variable et le transmettre au champ “data:”?

  { "yfilter": $("#yearFilter").serializeArray(), "gfilter": $("#genreFilter").serializeArray() } 

J’ai essayé JSON.ssortingngify II n’a pas pu le faire fonctionner probablement à cause des données étant un tableau.

Les tableaux d’années et de genres proviennent directement du menu déroulant jQuery. Il est sélectionné comme par #id comme “$ (” # yearFilter “)”. C’est l’élément de formulaire sélectionné.

  

Ce dont j’ai besoin au niveau de base, c’est:

 var someData = ""; if(...){ someData = { "yfilter": $("#yearFilter").serializeArray(), "gfilter": $("#genreFilter").serializeArray() }; } else if(...){ someData = "sampleSsortingng"; } 

Et en appel ajax:

 ... data: someData, ... 

Je pense avoir une idée de ce que vous voulez mais la publication a été trop compliquée par des questions superflues telles que json ssortingngify. Voici une fonction qui pourrait être utilisée à d’autres endroits de votre code pour effectuer un type d’appel AJAX à un autre.

Vous auriez alors peut-être plusieurs boutons et appelleriez la fonction dans les gestionnaires pour chaque type de bouton et changeriez l’argument passé en fonction

 doAjax('someval');/* use in button 1*/ doAjax('someOtherval');/* use in button 2*/ function doAjax(arg) { var someData = ""; if (arg == 'someval') { someData = { "yfilter": $("#yearFilter").val(), "gfilter": $("#genreFilter").val() }; } else { someData = "sampleSsortingng"; } $.ajax({ type: "POST", url: "somefile.php", cache: false, data: someData, dataType: "json", success: function(data) { if (arg == 'someval') { alert("success 1"); } else { alert("success 2"); } } }) } 

J’espère que j’ai compris ce que vous demandez. Vous pouvez faire quelque chose comme ça:

 var parameters = {}; if (...) { parameters = $("#yearFilter").serializeArray(); } if () { parameters = $("#genreFilter").serializeArray(); } 

puis remplacez la ligne:

 parameters: { "yfilter": $("#yearFilter").serializeArray(), "gfilter": $("#genreFilter").serializeArray() }, 

avec:

 data: parameters, 

Le type JSON devrait être la meilleure option pour les données dynamics. poussez toutes les données que vous souhaitez dans json comme indiqué ci-dessous, Créez donc votre json dynamicment et envoyez-le en tant que données ajax.

 var employees = { accounting: [], dept: "HR" }; employees.accounting.push({ "firstName" : item.firstName, "lastName" : item.lastName, "age" : item.age }); $.ajax({ url: POSTURL, type: 'POST', dataType: 'json', data : employees, contentType: 'application/json; charset=utf-8', success: function (results) { }, error: function (results) { jQuery.error(Ssortingng.format("Status Code: {0}, ", results.status, results.statusText)); } }); 

Essayez le:

 someData = JSON.ssortingngify({ yfilter: $("#yearFilter").val(), gfilter: $("#genreFilter").val() }); 

Ça va marcher.