I am tying to pass a javascript variable as an ajax paramater but it is being sent as null. Simply passing 'host' gives 'host' itself which isn't what is desired
var host = "some value"
$.ajax({
type: 'GET',
url: '/Main/GetData/',
data: '{'
hostname '=' + host '}',
dataType: 'json',
success: function(json) {
var data = json;
},
}); //ajax
Try the following:
data: {'hostname' : host},
Pass the data as an object, using key you can access the value of the variable on the server side.
USE:
var host = "some value"
$.ajax({
type: 'GET',
url: '/Main/GetData/',
data: {
"hostname": host
},
dataType: 'json',
success: function(json) {
var data = json;
},
}); //ajax
If you are trying to send data as a string make use of JSON.stringify()
dataToSend = JSON.stringify({ "hostname": host });
And in your AJAX
data : dataToSend
I feel the problem is you have made the wrong JSON data format.
the correct JSON format should be like this:{key:value}
Give an eg. here:
"employees": [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
ex:the employee contains 3 elements
Wish can make some help :)
Related
I cannot send JSON Data from HTML to PHP with jquery and always show fail status at console.log. Please check my code.
jsonObjects.domain = client_domain;
jsonObjects.pkg = client_package;
jsonObjects.company_name = client_company;
jsonObjects.company_email = client_email;
jsonObjects.personal_name = psn_name;
jsonObjects.personal_phone = psn_phone;
jsonObjects.personal_email = psn_email;
var JsonPush = new Array();
JsonPush.push(jsonObjects);
var JsonArray = JSON.stringify(JsonPush);
$.ajax({
type: "POST",
url: 'order.php',
data: JsonArray,
dataType: 'json',
})
.done(function (data) {
console.log('done');
console.log(data);
}).
fail(function (data) {
console.log('fail');
console.log(data);
});
Order.php file
<?php
$decoded = json_decode($_POST['data']);
var_dump($decoded);
?>
You don't need to stringify first, just post it in a keyed object and access via the key like this
let postData = { object: jsonObjects };
$.ajax({
type: "POST",
url: 'order.php',
data: postData,
dataType: 'json',
})
Then in php:
$jsonObjects = $_POST['object'];
note: you don't access the posted variable by the name of the object itself but rather the keys inside the posted object
You have no data parameter in your AJAX call. It should be:
data: { data: JsonArray },
But there really isn't any need to use JSON at all. You can just given an object as the data: option, and its properties will become POST parameters.
data: jsonObjects,
Then in PHP you can access $_POST['domain'], $_POST['pkg'], etc.
I'm trying to get back a json object from php to then use in my ajax.
My ajax is
$( document ).ready(function() {
var eventsListPath = "/php/eventsList.php";
$.ajax({
type: 'get',
url: eventsListPath,
data: {},
success: function(data) {
var json = JSON.parse(data);
$('#eventInformation').html(json[table]);
}
});
});
and then my php does stuff but I basically want to return a string (plus more, but getting the string to work first would probably help the rest):
$obj->table="hey";
echo json_encode($obj, JSON_UNESCAPED_SLASHES);
But the line
$('#eventInformation').html(json[table]);
seems to only give me back an error:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
What am I doing wrong?
first, use the Network Monitor to see the result of the HTTP request
e.g. in Firefox : https://developer.mozilla.org/en-GB/docs/Tools/Network_Monitor
then, try this code who let jQuery do the JSON parsing in the AJAX call :
$(document).ready(function () {
var eventsListPath = "/php/eventsList.php";
$.ajax({
type: 'get',
url: eventsListPath,
data: {},
result: "json"
success: function (dataJson) {
$('#eventInformation').html(json.table);
}
});
});
Try to use . operator, also there is no need to parse the JSON string it is already in JSON form :)
$(document).ready(function () {
var eventsListPath = "/php/eventsList.php";
$.ajax({
type: 'get',
url: eventsListPath,
data: {},
success: function (data) {
$('#eventInformation').html(data.table);
}
});
});
ON PHP, ensure that you are instantiating the response data like below
$obj = new StdClass;
$obj->table="hey";
First of all you should check the response is properly parsed as json. if any data is present before the json array, javascript will throw exceptions. Use the chrome's developer tools response tab in the network option for seeing the response. If it's ok , try the below code.
$(document).ready(function () {
var eventsListPath = "/php/eventsList.php";
$.ajax({
method: "get",
url: eventsListPath,
dataType : "json",
data: {}, //data
success: function (data) {
$('#eventInformation').html(data.table);
}
});
});
If I need to call a controller like this:
name.php?data={"user":"test","pass":"test"}
In order to obtain the information I need, via .ajax, I need help setting the variable to be sent with that specific format.
I used to the following code:
var arr = [{
data: {
"user" : $("#usuario").val(),
"pass" : $("#password").val()
}];
arr = JSON.stringify(arr);
However if doesn't send the right output, I've been said I need to send the variable with the json on it.
function callAjax(url, arr) {
var response = null;
jQuery.ajax({
url: url,
type: 'POST',
data: arr,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
async: false,
success: function(data) {
response = data;
},
error: function(jqXHR, textStatus, errorThrown) {
response = errorThrown;
},
timeout: 5000
});
return response;
}
Any advises?
Best Regards!
This link will help you a lot!
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
I used .post instead and solved the issue
I have a JSON string (stringified array of objects in javascript) which i intend to post to another page and then retrieve it from the $_POST variable. I used json =JSON.stringify(array).
The result gave me the following string
json = [{"keycodec":68,"eventc":"keydown","timec":1392849542994}
{"keycodec":65,"eventc":"keydown","timec":1392849543063},
{"keycodec":87,"eventc":"keydown","timec":1392849543084}]
Now I use
$( "#other").click(function() {
$.ajax({
url: 'some.php',
type: 'POST',
data: { kite : json}
});
On the page some.php I use
$kite=json_decode($_POST['kite'],true);
print_r($kite)
But nothing shows up. I have read many links on this topic and tried adding ContentType,dataType,processData parameters to the $.ajax() function but nothing helped.
What about this:
$( "#other").click(function() {
var json = [{"keycodec":68,"eventc":"keydown","timec":1392849542994}
,{"keycodec":65,"eventc":"keydown","timec":1392849543063},
{"keycodec":87,"eventc":"keydown","timec":1392849543084}];
$.ajax({
url: 'test.php',
type: 'POST',
data: "kite=" + JSON.stringify({ kite : json }),
success: function(msg){
alert(msg);
},
failure: function(errMsg) {
alert(errMsg);
}
});
});
And on your php code:
<?php
$obj=json_decode($_POST['kite']);
print_r($obj->{'kite'});
?>
Not in an elegant way on passing the json..
but this way you can still capture "kite" as post variable and decode your desired json string.
Let me start by saying I am not extremely familiar with Javascript and I cannot figure out what is going on here.
I have the following function:
self.search = function () {
var searchTerms = {
"City": this.cityName,
"State": this.stateName,
"StoreNumber": this.storeNumber,
};
$.ajax("/api/SearchApi", {
data: searchTerms,
type: "POST", contentType: "application/json",
success: function (result) {
alert(result);
}
}
});
When I submit, what happens is that instead of submitting a nice JSON object as expected, it submits a JSON objected formatted as so: "City=testing&State=AL&StoreNumber=test "
Ideally I would like to use a GET method that passes the object to my server so that I can return the results, but when I use a get method, it simply appends the above to the API call url resulting in a URL request formed as so: http://localhost:57175/api/SearchApi?City=testing&State=AL&StoreNumber=test
Any help would be appreciated.
Make sure you add the dataType of JSON to your $.ajax({ }); object. That should solve the problem!
$.ajax({
// ...
data : JSON.stringify( searchTerms ), // Encode it properly like so
dataType : "json",
// ...
});
2 Things
Add the json content type(not the data type) to your ajax object important to note is the charset your server is using in this case utf-8.
Use the Json2 Library to stringify and parse Json when sending and retrieving it can be found here : https://github.com/douglascrockford/JSON-js/blob/master/json2.js
$.ajax({
url: URL,
type: "POST",
//Stringify the data you send to make shure its properly encoded
data: JSON.stringify(DATA),
//This is the type for the data that gets sent
contentType: 'application/json; charset=utf-8',
//This is for the data you receive
dataType: "json"
}).done(function(data) {
var dataYouGet = JSON.parse(data);
}).fail(function(xhr, ajaxOptions, thrownError) {
}).always(function(data) {
});