I'm making a AJAX request like this:
$("#botao_pesquisar_material").click(function(){
$(this).attr("disabled", "disabled");
$("#material").addClass('loading');
$.ajax({
url: '{{ URL::base() }}/material/lista_ajax/',
dataType: 'json',
cache: false,
error: function(data)
{
console.log(data);
},
success: function(data) {
for(x in data)
{
console.log(data[x]);
}
}
});
My PHP method is ok because when I access it via URL, it returns me the expected JSON and when I call this on localhost, it works perfectly so it isn't about special characters or something else with the data.
When I run this on my server I have this:
GET http://dc.portaldeideias.com.br:8080/sergios/public/material/lista_ajax/?callback=jQuery172007718208665028214_1342725644520&_=1342725649090 500 (Internal Server Error) jquery.js:4
f.support.ajax.f.ajaxTransport.send jquery.js:4
f.extend.ajax jquery.js:4
$.click.$.ajax.url
f.event.dispatch jquery.js:3
f.event.add.h.handle.i
Using console.log(data) I have the entire JSON response but here is what is really strange:
The readyState is 4
The responseText is [{"attributes":{"pk_a030_id":78,"a030_descricao":"Camur\u00e7a"},"original":{"pk_a030_id":78,"a030_descricao":"Camur\u00e7a"},"relationships":[],"exists":true,"includes":[]}]
The statusText is Internal Server Error
So, the requested value is created but I receive a Internal Server Error
Sorry for posting this as an answer, but I don't have the required privileges to add this as a comment for your question.
Have you noticed that the URL in the javascript log http://localhost:8080/sergios/public/material/lista_ajax/ is different than the one provided in your screenshot http://dc.p[...]s.com.br:8080/sergios/public/material/lista_ajax?
Could it be the case that you have two different versions of the lista_ajax PHP method hosted in two different servers (maybe one remote and the other one local), and that's why it works flawless when seeing it from the browser and has bugs when tested with ajax?
It's also important to notice that if you are browsing a website hosted on a remote server, and the ajax is configured to a localhost address, it will do a request for your own machine, not the remote server (javascript runs in the browser, so localhost translates to its own client address).
Maybe this is not the case, but it was worth commenting.
Related
The following function should serialize form data and send it to be processed on the server.
function postIt() {
var postData = $("#myForm").serialize();
$.ajax({
type: 'POST',
data: postData,
url: 'php/makeTopics.php',
success: function(data) {
/* do stuff*/
}
})
}
However, I have just started receiving 403 Forbidden errors from the server. Upon investigation, I have found that the .serialize() function replaces whitespace with "+" and that if I resend the data without the "+"s I no longer get the error.
What am I doing wrong? Is this a client or a server issue?
More info:
-Using LITESPEED server,
-I have reduced my php code to <?php echo("Hello World!"); ?> and the problem persists as described, so I think it must be something else in the webserver. Also, this is new behaviour - I have made no code changes at either end to trigger it.
-WORKING DATA EXAMPLE: tn=factorystore&tkw1=manufacturers&tkw2=brickandmortar
-NOT WORKING DATA EXAMPLE: tn=factory+store&tkw1=manufacturers&tkw2=brick+and+mortar
(Note: the above data examples are the 'source' Form Data taken from the Chrome console)
when you say,
reduced my php code to and the problem persists
do you mean, https://yourdomain.com/hello.php return 403?
Generally, You can ask your host to check the server error log to find out why 403 error. 403 could be caused by many reasons. Such as mod_security, or some restriction on some URLs, folders, etc.
I am using WAMP 3.0.8 PHP 7.0.10 Apache 2.4.23 and trying to build my first JSON API.
The ajax call does send the data to the server. I can see it stored in the text file.
My AJAX looks like this.
$(document).ready(function(){
$('#order').click(function(){
var send = {"name":"Jo Moe", "age":39, "city":"Meridian"};
var prescription = JSON.stringify(send);
$.ajax({
type: 'POST',
dataType: 'JSON',
url: 'https://apa.superserver.com/receive.php',
data: {"scripts": prescription},
success: function(data){
console.log(data);
alert(data);
$('#success').html('<p>Finished</p>');
}
});
});
});
Server side looks like this:
if(isset($_POST["scripts"]) && !empty($_POST["scripts"])){
$sent = filter_input(INPUT_POST, "scripts", FILTER_SANITIZE_SPECIAL_CHARS);
$scripts = html_entity_decode($sent);
file_put_contents("jsonScript.txt", $scripts);
$finish = "Message Received!";
echo json_encode($finish);
}
Now this all worked when it was on the same server. When I separated the receive.php and put it on the remote server. It no longer shows the response.
Thanks!
UPDATE:
Get json ajax php form to work remotely
The link above fixed my issue and gave me more information in the console to figure out what was happening. (I should not have been given a -1) The problem with searching the index here that if you don't use the exact terms in the post it is nearly impossible to find. (my two cents)
Adding the error function and changing from "data" to "response" made the difference along with the xhr. I can see everything.
This my return to the console:
Object {readyState: 4, responseText: "↵↵hello!"Message Received!"", status: 200, statusText: "OK"}
ajax.php:56 parsererror
ajax.php:57 SyntaxError: Unexpected token h in JSON at position 0
at JSON.parse (<anonymous>)
at parseJSON (jquery-1.6.4.min.js:2)
at b$ (jquery-1.6.4.min.js:2)
at w (jquery-1.6.4.min.js:4)
at XMLHttpRequest.d (jquery-1.6.4.min.js:4)
As you can see the response text is what the server is sending back.
I did have to modify my httpd.conf to turn on the mod_headers.c and added an .htaccess .
UPDATE 2:
Figured out what was causing the parse error. I had a print "hello!" line in my server side file that I had there for other troubleshooting. Once I removed it and had only the posted server side code. Everything is peachy now. Onward!!
If I understand correctly You want to make ajax request to another domain. It's blocked because of Same origin policy. To achieve your goal You can implement JSONP
I'm develop something that need some data to load on AJAX (using POST method).
When I'm build the code on localhost (using XAMPP on Windows 7). It works pretty well.
But, when I'm moved the code to hosting server, It give me a 500 Internal Server Error..
Here's the code that send the AJAX Request
$.post("the-link-to-ajax-handler",
{
//some parameter
roomid : roomid,
amenities : amenities,
},
function(data){
//process that I do when ajax complete
}
And here's the AJAX Handler (using PHP)
$roomid = mysqli_escape_string($conn, $_POST['roomid']);
$amenities = mysqli_escape_string($conn, $_POST['amenities']);
echo $roomid."<br/>".$amenities;die();
*I'm trying to print the parameter but no luck, I'm still get the 500 Error
Screenshot of Network Panel from process on hosting
And here's the Screenshot Network Panel from process on localhost (definitely with the same code)
1) Are you missing any javascript plugin files or the plugin files path is not defined you faced the 500 internal server error.
2) Hosting server is Case Sensitive check the Variable values.
3) If you move to ajax before alerting the flow.
Read your error logs to find out problem or try adding error_reporting(E_ALL) to your code then run again.
Try this :
$.ajax({
url: "the-link-to-ajax-handle", // Url to which the request is send
type: "POST", // Type of request to be send, called as method
data: {roomid:roomid,amenities:amenities}, // Data sent to server, a set of key/value pairs representing form fields and values
dataType: 'json'
}).done(function (data) {
console.log(data);
}).fail(function (data) {
console.log('failed');
});
I had same issue, i noticed that my php files permission was set to 0755. i changed it to 0644 and it worked well.
I have two folders with a php on my domain. From one file I want to send data to the other via using ajax call. The call worked for me on localhost, but when I had my website on live server it gives 500 error on the same ajax call ?
How can I solve this issue ?
My ajax call is as following:
var data_to_send = {};
j.ajax({
url : '../orangehrm/symfony/web/index.php/auth/login',
type: "POST",
data : data_to_send,
async: false,
success: function(data, textStatus, jqXHR)
{
time_zone = j(data).find('#hdnUserTimeZoneOffset').val();
},
error: function (jqXHR, textStatus, errorThrown)
{
}
});
A 500 number error is a server-side exception - something went wrong in Apache or IIS or whatever. To determine what that was, you can check the error logs on the server (Event Viewer on Windows), or turn on "detailed error messages" in your web service software for remote requests to see more information returned to the browser - browsing locally on the server can have the same effect.
Your ajax call is ok (as a call, cannot account for what you post there).
Error 500 = something went wrong on the server side. It could go from a mistyped function name in a script or something similar to a bad config that kills the script. Activate logging on the server, or activate displaying errors on the server (you can find this easy with a simple google type).
Complete list of codes here: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes (you can see that 500 is a generic error).
Now... some wild guesses: Since you said on your local server went fine, but broke on live, there are some usual suspects... one of them would be file permissions. On your local server you are a god, while on live you are well... less god. If your that php script uploaded files, or write something on disc, check that the user that runs the apache have rights to access/read/write that specific things.
Another usual suspect is the database connection (in case you have any). The credentials on live may be different.
And another one... php version/php extensions/php configs (like short tags for example).
Again... it may be anything... but usually I've seen that people make mistakes covered by those 3.
The 500 http code means your server returns an Internal Error on the accessed url.
Try to access that url without Ajax, then try to alert the url(see code bellow), copy the alerted string and paste it in your browser to see if you are pointing on the wished resource or not. This because your url seem to be poor and pointing to another thing than the wished.
DEBUG CODE:
var data_to_send = {},
_url='../orangehrm/symfony/web/index.php/auth/login';
//console.log(_url);
alert(_url);//copy this alerted _url and paste in the browser
j.ajax({
url : _url,
type: "POST",
data : data_to_send,
async: false,
success: function(data, textStatus, jqXHR)
{
time_zone = j(data).find('#hdnUserTimeZoneOffset').val();
},
error: function (jqXHR, textStatus, errorThrown)
{
}
});
I have a jquery issue, I think it's a jquery issue, but I'm calling a php page with a ajax call. Obviously this is easy, but when I go live with it I keep getting a 500 error. I have tried everything I can think of. But I'm not getting anywhere. I'm sure it's because I'm not a jquery guru, so if you are I could use your brain.
keep in mind this works locally but not in production:
$('#submit').on('click', function(e){
e.preventDefault();
if($('#signupForm').valid())
{
var data = $('#signupForm').serializeObject();
$.ajax({
type: "POST",
url: 'http://pathtooweb.com/funcs/signup.php',
data: data,
success: function(data) {
toastr.success(data, "Thank you!");
$("#signupForm").trigger( "reset" );
},
error: function(xhr, ajaxOptions, thrownError) {
console.log(xhr.responseText);
}
});
}
});
Here is the actual issue I am getting on console:
POST http://pathtooweb.com/funcs/signup.php 500 (Internal Server Error) jquery.js:7845
x.support.cors.e.crossDomain.send jquery.js:7845
x.extend.ajax jquery.js:7301
(anonymous function) pathtooweb.com/:84
x.event.dispatch jquery.js:4676
y.handle
UPDATE:
This was not a cross domain issue, it was a server error in a way.. come to find out when I was pushing my code up to github then down to my server one of the libraries I was using was not uploading to github, so in turn wasn't being pulled down to the server. Can't really say why there was no .gitignore file. so anyway, thanks for the "suggestions". :)
Dude I guess you are trying a cross domain POST..!! Which is not allowed via ajax.. and is a strict NO NO as per web standards.!!
Possibly locally you are using a different URL in the ajax request.. which is also hosted locally.. Is it the case??
If you want a cross domain POST.. directly post the form to that URL by having the form action URL as the crossdomain URL.
The second option will be to use jsonP as the datatype in the ajax request.. this is a hack but works.