AJAX postdata在localhost上工作但不在(Apache)服务器上工作

时间:2017-05-02 08:16:31

标签: ajax apache post xmlhttprequest postdata

我发现在我的服务器上没有通过AJAX发送postdata的问题。为了调试它,我编写了以下相当简约的javascript来测试一个简单的AJAX调用:

function my_custom_ajax(target_page, target_element , postdata_contents) {

  // Sending the XMLHttpRequest as postdata
  var xhr = new XMLHttpRequest();
  xhr.open("POST", target_page, true);
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
  xhr.setRequestHeader("Content-length", postdata_contents.length);
  xhr.setRequestHeader("Connection", "close");
  xhr.send(postdata_contents);

  // Waiting for the request to return
  xhr.onreadystatechange = return_data;

  // If all went well, we update the target element
  function return_data()
  {
    if(xhr.readyState === 4)
    {
      if(xhr.status === 200)
      {
        // We update the target element
        document.getElementById(target_element).innerHTML = xhr.responseText;
      }
      // Throw error in case of 404 or such
      else
        document.getElementById(target_element).innerHTML = "XHR can't be loaded";
    }
    // Throw error in case request got interrupted or didn't work out
    else
      document.getElementById(target_element).innerHTML = "XHR error";
  }
}

使用以下HTML调用它:

<div onClick="my_custom_ajax('test_page.php?xhr','my_id','postdata_test');">
  Click me
</div>
<div id="my_id">
  xhr response will appear here
</div>

并调用仅包含此内容的PHP页面:

exit(var_dump($_POST));

在我的Apache localhost或我拥有的另一台Apache服务器上运行这段代码时,它确实传递了postdata_contents中的任何内容作为postdata。退出(var_dump($ _ POST));确实显示它正常工作,并打印传递给它的postdata的值。

但是,当在Apache服务器上运行同一段代码时,它不起作用,我得到的只是“array(0){}”,因为没有根据PHP文件传递postdata。

这是Firefox的开发工具查看请求详细信息(法语,对不起,但应该很明显是什么):

调试工具显示正确发送了postdata内容:

但是,返回的内容显示postdata以某种方式未通过:

在我的localhost和我的其他Apache服务器上,一切都完全相同,直到最后一步,postdata被正确传递(var_dump消息的样式,但你可以很容易地看到的主旨它:postdata_test是$ _POST的一部分:

经过几个小时的摆弄这个Apache服务器的配置并尝试了我能想到的所有调试方法和断点,我的神经过于紧张,现在还没有理性地继续思考这个问题。由于我没有选择使用其他服务器或者只是在新服务器上对我的本地Apache配置文件进行复制,我将这个问题推迟给大家,希望有人可以解决这个问题,或者曾经遇到类似问题。

提前致谢, Eric B.

1 个答案:

答案 0 :(得分:1)

我自己解决了这个问题,我在服务器上激活了mod_dumpio,一旦关闭它就开始工作了。

我不知道mod_dumpio正在做什么来拒绝XHR POST而不是通用HTTP POST,但至少已经解决了。

希望有一天能帮到别人。

(在旁注中,我意识到我的示例中的postdata查询格式不正确,应该是«postdata_test =»而不是«postdata_test»,所以如果你遇到我的情况并希望运行同样的话,请添加等号我做过的测试)