Ajax调用有时会失败

时间:2018-05-16 16:56:02

标签: php jquery ajax post drupal-7

我有一个由按钮点击触发的ajax调用,但即使一切看起来都很好,它有时会停止工作。错误是500内部服务器,这是相当广泛的,所以我试图寻找我的功能内部的错误,但到目前为止没有运气。代码有什么问题吗?

这是我的AJAX电话:

jQuery(document).ready( function($){

$('.modal-footer').on('click', '#tempsave_submit', function() {
        //Loads all the variables to be sent    
        var source = $("#source-save").text();
        var name = $("input[id='pname-save']").val();
        var stage = $("input[id='pstage-save']").val();

        //Checks to see if any of those variables are empty
        if (source == null || name == null || stage == null)
            {$("#failstat").text("Error Reference Number: 300");
            $("#failsave").slideDown(100).delay(2000).slideUp(100);
            }

        //If they are all valid, it calls the ajax function
    else{
        $.ajax({
        url: 'https://website.com/tempsave',
        type: 'POST',
        data: {
            source_save: source,
            pname_save: name,
            pstage_save: stage

        },
        dataType : 'html',
        timeout: 30000,
        cache: false,
        success: function () {


            $("#successsave").slideDown(100).delay(2000).slideUp(100);

        },
        error: function (jqXHR, exception) {

            $("#failstat").text("Error Reference Number: 343-" + jqXHR.status + exception);
            $("#failsave").slideDown(100).delay(2000).slideUp(100);

        }

    });
    }
    });

    });

这里是目标php:

if($_SERVER["REQUEST_METHOD"] == "POST")
{
    $source = $_POST["source_save"];
    $name = temp_input_check($_POST["pname_save"]);
    $description = temp_input_check($_POST["pstage_save"]);

    // tempsave_write() is a predefined function-no issues with this part
    $fid = tempsave_write($source, $name);

    // tempsave_save() is a predefined function-no issues with this part
    $query = tempsave_save($name , $description , $fid);
}else{
    $html = '
  <h2>No Projects Were Found!</h2>
  </div>
  <p>Start by creating a new project. Your projects will be displayed here 
  once you submit them.</p>';
    return $html;
}

我检查了响应,当它给我500内部错误时,它是从&#39; else&#39;返回的html。这意味着服务器首先没有以POST方式发送它。那可能吗。 @Taplan帮助了我,我们发现这个方法是GET!这怎么可能?

更新 我不得不更改我的HTML代码的某些部分(没有触及与ajax调用相关的代码),现在ajax只通过GET方法发送它,因此,给出500错误。正在发送的参数之一是html源代码,它已被更改,现在它作为GET发送。我试图缩小范围,发现参数甚至不能作为GET使用,即使页面显示它们是作为GET发送的。现在我确定问题是由于html源代码被发送但不知道它有什么问题。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

我唯一看错的是使用&#34;输入&#34;在你的ajax调用块而不是&#34;方法&#34;。见这里:http://api.jquery.com/jquery.ajax/

您的代码应如下所示:

$.ajax({
  url: 'https://website.com/tempsave',
  method: 'POST',
  data: {
    source_save: source,
    pname_save: name,
    pstage_save: stage

  },
  dataType : 'html',
  timeout: 30000,
  cache: false,
  success: function (response) {
    $("#successsave").slideDown(100).delay(2000).slideUp(100);

  },
  error: function (jqXHR, exception) {        
    $("#failstat").text("Error Reference Number: 343-" + jqXHR.status + exception);
    $("#failsave").slideDown(100).delay(2000).slideUp(100);

  }

});