Problem Question:
I am making a post call to my API but keep on getting 500 server error. After doing some debugging API is expecting data in different format
API excepting --
user[email] -- json would be {user =>{email=>'test#test.com'}
I am sending as
return $http.post(urlBase + '/users/password',{email: email});
json is like {"user":"test#test.com"}
Recently started learning. So please guide me or provide me with any resources.
Try to send this:
{"user": {"email":"test#test"}}
This is similar to:
user.email = "test#test";
In your case:
return $http.post(urlBase + '/users/password',{user:{email: email}});
This is a good reference for this: JSON Syntax
try this one,
$http({
method: 'POST',
url: urlBase + '/users/password',
data: $.param({email: email})
});
OR
$http({
method: "POST",
url: urlBase + '/users/password',
params: {email: email}
);
Related
Currently in my web app project, I need to parse the content of a web page, and after some searching, I found that Mercury Web Parser API is quite suitable for me.
And I have some experience with such kind of third party APIs, generally speaking I can get my desired result.
But for this API, I can't find documentation about the API usage on the official website.
Based on the my study, it provide two methods:
first is cURL as following:
curl -H "x-api-key: myapikey" "https://mercury.postlight.com/parser?url=https://trackchanges.postlight.com/building-awesome-cms-f034344d8ed"
the myapikey is the API key I get from the website. Then I can get the result in JSON format, which is the main content of the web page specified by the url parameter. It works well for me, I mean the cURL method.
And on the website, it said that the second method is HTTP call, which is just what I need:
GET https://mercury.postlight.com/parser?url=https://trackchanges.postlight.com/building-awesome-cms-f034344d8ed
Content-Type: application/json
x-api-key: myapikey
So based on my understanding, I use jquery AJAX method to do this as following:
var newurl = "https://mercury.postlight.com/parser?url=http://www.businessinsider.com/joel-spolsky-stack-exchange-interview-2016-12&x-api-key=myapikey"
$.ajax({
url: newurl,
dataType: "jsonp",
success: function(data){
console.log(data.title);
}
})
here I made JSONP request because of the Cross origin issue.
But now I face 401 error message (401 Unauthorized. The request has not been applied because it lacks valid authentication credentials for the target resource)
For now my guess is that the apikey is not correctly passed to server. So based on the cURL's successful call, can I get the correct format for AJAX call?
Update:
Based on the following answers ,I tried to set the request header as following:
$.ajax({
url: newurl,
dataType: "jsonp",
beforeSend: function(xhr){
console.log(apiKey);
xhr.setRequestHeader('x-api-key', apiKey);
},
/*
headers: {
"x-api-key": "M1USTPmJMiRjtbjFNkNap9Z8M5XBb1aEQVXoxS5I",
"contentType": 'application/json'
},
*/
success: function(data){
console.log("debugging")
console.log(data.title);
},
error: function (error) {
console.log(error)
}
})
I tried both beforeSend and headers. But still can't work and get the following trackback error message:
send # jquery.js:8698
ajax # jquery.js:8166
addNewArticle # topcontroller.js:18
fn # VM783:4
e # angular.js:281
$eval # angular.js:147
$apply # angular.js:147
(anonymous) # angular.js:281
dispatch # jquery.js:4435
elemData.handle # jquery.js:4121
And for the last send function, still 401 error.
But the ajax error handling part shows that the readyState:4 and status: 404 result. So what's going here.
For your question, the curl request is sending a header which you have attached as part of the query string in your $.ajax request.
Try the following instead (using beforeSend + xhr) :
// broke this string down so you don't have to scroll
var newurl = "https://mercury.postlight.com/parser?" +
"url=http://www.businessinsider.com/" +
"joel-spolsky-stack-exchange-interview-2016-12";
// set your api key
var apiKey = "<your api key>";
$.ajax({
url: newurl,
dataType: "json",
beforeSend: function(xhr){xhr.setRequestHeader('x-api-key', apiKey);},
success: function(data){
console.log(data.title);
}
})
I am trying to do a http post using AngularJS but angular is not converting my $scope variable to JSON.
Here is my code:
$http({
method: "POST",
url: "/Account/Login",
data: $scope
})
Which results in the request POST message having
"$SCOPE"
but if I change it to output any of my scope properties, it is sending the message with correct properties, e.g.:
$http({
method: "POST",
url: "/Account/Login",
data: { email: $scope.email, password: $scope.password }
})
Which results in the request POST message having
{"email":"asdasd#Asdasd.asd","password":"asd"}
Do I always have to wrap my requests like this? Or is there a way to tell AngularJS to send all properties on scope? Any Pro's / Con's?
Sending the $scope is not a good idea, It contains lot more than your email and password
You should create a property like $scope.user and then attach the model to it like $scope.user.email. Now you can send it using $scope.user
$http({
method: "POST",
url: "/Account/Login",
data: $scope.user
})
a lil about $scope
scope is an "object" that "binds" to DOM element where you apply controller. All child elements can read and modify scope data (unless you modify primitives in new scopes or they're isolated
for more official doc is they way
Thank you in advance for any assistance you maybe able to provide. I'm trying to post from my app to an app group that I have created. Using the code below it completes the request successfully but the data returned is empty. Please tell me what I'm doing wrong. I did also notice that it's not performing a POST but rather a GET.
$.ajax({
type: 'POST',
url: 'https://graph.facebook.com/v2.1/'+g_id+'/feed?access_token='+User["User AccessToken"],
data: JSON.stringify({
message: g_mes
}),
dataType: "jsonp",
success: function(data){
console.log(data);
},
error: function(data1){
console.log(data1);
}
})
You really should use the JavaScript SDK for the API. Here is a basic tutorial: https://developers.facebook.com/docs/javascript/quickstart/v2.1
And this is what the API call would look like:
FB.api('/' + g_id + '/feed', 'post', {message: g_mes}, function(response) {
console.log(response);
});
See Facebook docs for a code example too: https://developers.facebook.com/docs/graph-api/reference/v2.1/group/feed
You donĀ“t even need to worry about the Access Token. You just need to use FB.login with the appropriate permissions in the scope parameter to authorize the user.
I am trying to attach data to my requestbody while sendign using jQuery ajax.
If I tried to do it using the extension RESTCLient is either firefox or chrome it works fine, which means that my method on the serverside is working fine.
That is why I am pretty sure that it the ajax call I am making
$.ajax({
url: 'lingosnacks/delete/'+ id,
type: 'POST',
data: $('#email').val() + $('#password').val()
dataType: "json",
success: function(data) {
console.log("FILL| Sucess| ");
console.log("FILL| Sucess| Data| " + data);
fill(data);
}
});
The data line is wrong, it should be very similar to a JSON string, like this:
data: {email: $('#email').val(), password: $('#password').val()},
You need to have the data you are sending in this format:
email=blah%40blah.com&password=pass123
You can do that with jQuery using $('form').serialize()
Also, you are missing a , after your data string in the Ajax call.
Actually data param in jQuery Ajax method is for sending url params.
You can send the same by appending then into the url but to make the code more readable e and organized i would prefer to use data variable.
So your data content should look like :
data : "email="+$('#email').val()+"&password="+$('#password').val();
I am not pretty sure if sending params like a json object will work or not because i never used it.
I am sending a POST AJAX request using Angularjs and its $http module to Django server. Here is an example:
$http({
method: 'POST',
url: '/url/',
data: 'test data'
}).
success(function(data, status, headers, config) {
doSomeStuffWhenSuccess();
});
The problem is what I get in Django. No matter what I send the data is always the key of QueryDict object and value of that is always an empty list.
<QueryDict: {u'test data': [u'']}>
I don't have a clue why. What am I missing?
I use almost default created Django application with default middlewares only. I created only a view and set an url in url config. Version of Django is 1.3. And I configured angular's $http module to always send a header containg csrf token to satisfy Django.
I resolved this with jQuery param function. I think it's more elegant solution.
$http({
method: 'POST',
url: '/url/',
data: $.param({test: data})
})
Now it works like I wanted.
I believe django thinks you are sending a urlencoded form, ex. key=value&key2=value2...
if you'd try:
$http({
method: 'POST',
url: '/url/',
data: 'test=data'
})
You should get
<QueryDict: {u'test': [u'data']}>
You can always obtain the data (raw body content) as follows:
request.body
Hope this is what you are looking for.