Comment éviter l'erreur suivante lorsque j'essaie de prendre des données d'un appel AJAX et de les brancher à une autre fonction lorsque je clique sur le bouton d'envoi?
L'appel console.log dans la fonction ajax indique que les données sont saisies et je l'espérais ensuite stockées dans json_data.
L'objectif était alors d'utiliser ces données pour modifier une chaîne soumise via un formulaire HTML.
L'erreur est ensuite renvoyée à la ligne dans la fonction 'clic':
console.log(json_data.length);
<title>Test Form</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<style>
#results_box {
border: red 5px solid;
}
#place {
border: #cccccc 1px solid;
}
</style>
<script type="text/javascript">
$(document).ready(function() {
var json_source = "https://spreadsheets.google.com/feeds/list/0ApL1zT2P00q5dG1wOUMzSlNVV3VRV2pwQ2Fnbmt3M0E/od7/public/basic?alt=json";
var string_data ="";
var json_data = $.ajax({
dataType: 'jsonp',
url: json_source,
success: function(data){
var data_obj = [];
for (i=0; i<data.feed.entry.length; i++){
var el = {'key': data.feed.entry[i].title['$t'], 'value': '<p><a href="'+data.feed.entry[i].content['$t']+'>'+data.feed.entry[i].title['$t']+'</a></p>'};
data_obj.Push(el)};
console.log("data grabbed");
return data_obj;
},
error: function(jqXHR, textStatus, errorThrown){
$('#results_box').html('<h2>Something went wrong!</h2><p><b>' + textStatus + '</b> ' + errorThrown + '</p>');
}
});
$(':submit').click(function(event, json_data){
event.preventDefault();
console.log(json_data.length);
//function
if ($('#place').val() !=''){
var copy_string = $('#place').val();
var converted_string = copy_string;
for (i=0; i<json_data.length; i++){
//console_log(data.feed.entry[i].title['$t']);
converted_string = converted_string.replace(json_data.feed.entry[i].title['$t'],
'<a href="'+json_data.feed.entry[i].content['$t']+'>'+json_data.feed.entry[i].title['$t']+'</a>');
}
$('#results_box').text(converted_string).html();
}
});
});//document ready end
</script>
</head>
<body>
<div id="wrapper">
<div id="query_box" class="panel">
<form id="form_submit"><h4>Copy to process:</h4>
<textarea id="place"></textarea>
<input type="submit" value="Go" />
</form>
</div>
<div id="results_box" >Results will appear here</div>
</div>
Vous ne transmettez pas la variable correctement. Une solution rapide consiste à créer une variable globale comme celle-ci:
var global_json_data;
$(document).ready(function() {
var json_source = "https://spreadsheets.google.com/feeds/list/0ApL1zT2P00q5dG1wOUMzSlNVV3VRV2pwQ2Fnbmt3M0E/od7/public/basic?alt=json";
var string_data ="";
var json_data = $.ajax({
dataType: 'json', // Return JSON
url: json_source,
success: function(data){
var data_obj = [];
for (i=0; i<data.feed.entry.length; i++){
var el = {'key': data.feed.entry[i].title['$t'], 'value': '<p><a href="'+data.feed.entry[i].content['$t']+'>'+data.feed.entry[i].title['$t']+'</a></p>'};
data_obj.Push(el)};
console.log("data grabbed");
global_json_data = data_obj;
return data_obj;
},
error: function(jqXHR, textStatus, errorThrown){
$('#results_box').html('<h2>Something went wrong!</h2><p><b>' + textStatus + '</b> ' + errorThrown + '</p>');
}
});
$(':submit').click(function(event){
var json_data = global_json_data;
event.preventDefault();
console.log(json_data.length);
//function
if ($('#place').val() !=''){
var copy_string = $('#place').val();
var converted_string = copy_string;
for (i=0; i<json_data.length; i++){
//console_log(data.feed.entry[i].title['$t']);
converted_string = converted_string.replace(json_data.feed.entry[i].title['$t'],
'<a href="'+json_data.feed.entry[i].content['$t']+'>'+json_data.feed.entry[i].title['$t']+'</a>');
}
$('#results_box').text(converted_string).html();
}
});
});//document ready end
console.log(typeof json_data !== 'undefined'
? json_data.length : 'There is no spoon.');
... ou plus simplement ...
console.log(json_data ? json_data.length : 'json_data is null or undefined');
Vous accédez à un objet non défini.
La solution consiste à rechercher la valeur null ou undefined (pour voir si l'objet existe) et seulement ensuite à itérer.
Problème de format de données JSON "ProjectID" Supprimer "ProjectID": Cette valeur valeur de clé de la collection objeckt
{ * * "ProjectID" * * : {
"name": "ProjectID",
"value": "16,36,8,7",
"group": "Genel",
"editor": {
"type": "combobox",
"options": {
"url": "..\/jsonEntityVarServices\/?id=6&task=7",
"valueField": "value",
"textField": "text",
"multiple": "true"
}
},
"id": "14",
"entityVarID": "16",
"EVarMemID": "47"
}
}