jQuery Ajax到PHP MySQL - 跨域内部服务器错误(500)

I have a jQuery ajax call to update my database using a php script.

This is the call I make:

$.ajax({
        url: "update.php",
        type: 'POST',
        dataType: 'jsonp',
        data: {key1: value1, key2: value2},
        cache: false,
        error: function() {
            $("#failUpload").removeClass("hide");
        },
        success: function(data) {
            $("#succesUpload").removeClass("hide");
                    setTimeout(function() {
                        $("#succesUpload").addClass("hide");
                    }, 5000);
        }
   });

PHP Update part:

$key1 = $_POST["key1"];
$key2 = $_POST["key2"];

$con=mysqli_connect("localhost","username","password","dbname");

if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql = "UPDATE TabelName SET ". $key2 ." ='". $key1 ."' WHERE id=1";

if ($result = mysqli_query($con, $sql)) {
    $resultArray = array();
    $tempArray = array();

    while ($row = $result->fetch_object()) {
        $tempArray = $row;
        array_push($resultArray, $tempArray);
    }

}
mysqli_close($con);

The database updates and it works but in the console.log I receive this error message: POST http://domainname.com/file.php?callback=jQuery2110765103816287592_1432976576289 500 (Internal Server Error) When I open this I find this:

_.ajaxTransport.Y.cors.a.crossDomain.send @ jquery.js:26

I already searched and found about Cross Domain call stuff and you have to use jsonp etc but it didn't work out. Thx!

Use following function for error. It will show the exact issue. I think it will help.

error : function(XMLHttpRequest, textStatus, errorThrown) {
                alert(XMLHttpRequest.responseText+errorThrown+textStatus);
                $("#failUpload").removeClass("hide");
        }

All the best.

With jsonp you can't send data using POST. jQuery $.ajax call has a wrong name because it's confused. When you do an $.ajax call with "JSON-P" data that functions injects a script on your DOM (< script src="example-domain.com/do-this-task.php?callback=my_callback_on_js>).

Do this:

  1. Use only $.ajax with JSON but ensure that you are on the same domain, if not, see point 2.
  2. If you are on localhost and you are calling other different domain, then you need to use jsonp (but only works for GET requests) OR enable CORS on server. See this post because I explain a similar problem like yours: local AJAX-call to remote site works in Safari but not in other browsers

For me the answer in this one was to delete:

dataType: 'json'

I found the answer here: jQuery returning "parsererror" for ajax request

Also I changed PHP fetch to:

if (mysqli_query($con, $sql)) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . mysqli_error($con);
}
$.ajax({
        url: "update.php",
        type: 'POST',
        dataType: 'jsonp',
        data: {key1: value1, key2: value2},
        cache: false,
        crossDomain: false,
        error: function() {
            $("#failUpload").removeClass("hide");
        },
        success: function(data) {
            $("#succesUpload").removeClass("hide");
                    setTimeout(function() {
                        $("#succesUpload").addClass("hide");
                    }, 5000);
        }
   });

put crossDomain: false, and try with this.