【问题标题】:jQuery Ajax to PHP MySQL - Cross Domain Internal Server Erro (500)jQuery Ajax 到 PHP MySQL - 跨域内部服务器错误 (500)
【发布时间】:2015-05-30 11:07:51
【问题描述】:

我有一个 jQuery ajax 调用来使用 php 脚本更新我的数据库。

这是我打的电话:

$.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 更新部分:

$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);

数据库更新并且可以正常工作,但在 console.log 中我收到以下错误消息:POST http://domainname.com/file.php?callback=jQuery2110765103816287592_1432976576289 500 (Internal Server Error) 当我打开它时,我发现:

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

我已经搜索并找到了关于跨域调用的东西,你必须使用 jsonp 等,但它没有成功。谢谢!

【问题讨论】:

  • 您将 JSONP 用于本地请求是否有特定原因?尝试使用dataType: 'json'。虽然,这似乎是多余的,因为您的 PHP 代码似乎没有在响应中返回任何数据。
  • 你关闭你的ajax了吗???
  • 我从 json 开始,但这给了我同样的错误......然后我找到了跨域 ajax 帖子,上面写着要使用 jsonp 但同样的错误......
  • ajax 已关闭但没有问题我会编辑它!
  • 500 错误到底是什么?这似乎表明您的 PHP 代码存在问题。

标签: php jquery mysql ajax


【解决方案1】:

使用下面的函数来解决错误。它将显示确切的问题。我认为这会有所帮助。

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

一切顺利。

【讨论】:

    【解决方案2】:

    使用 jsonp,您无法使用 POST 发送数据。 jQuery $.ajax 调用有一个错误的名称,因为它很混乱。当您使用“JSON-P”数据执行 $.ajax 调用时,该函数会在您的 DOM 上注入脚本()。

    这样做:

    1. 仅将 $.ajax 与 JSON 一起使用,但请确保您使用的是相同的 域,如果不是,请参阅第 2 点。
    2. 如果您在本地主机上并且您是 调用其他不同的域,那么你需要使用 jsonp (但只 适用于 GET 请求)或在服务器上启用 CORS。看到这篇文章,因为我解释了一个类似你的问题: local AJAX-call to remote site works in Safari but not in other browsers

    【讨论】:

      【解决方案3】:

      对我来说,这个答案是删除:

      dataType: 'json'
      

      我在这里找到了答案:jQuery returning "parsererror" for ajax request

      我还将 PHP fetch 更改为:

      if (mysqli_query($con, $sql)) {
          echo "Record updated successfully";
      } else {
          echo "Error updating record: " . mysqli_error($con);
      }
      

      【讨论】:

        【解决方案4】:
        $.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);
                }
           });
        

        输入 crossDomain: false,然后试试这个。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-06-27
          • 2019-12-10
          • 2013-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-23
          • 1970-01-01
          相关资源
          最近更新 更多