reactjs html php未收到请求

时间:2019-01-20 08:04:30

标签: javascript php html reactjs

我编写了一个网页,当按下该网页时,该网页将一个get请求发送到PHP脚本。 PHP脚本创建一个名为asdf.txt的文件。目前,我在2个不同的服务器上都有此代码,其中之一是Heroku。在Heroku上,此代码可以正常工作:创建了一个名为asdf.txt的新文件。但是,在另一台服务器(我要在上面放置此代码的服务器)上,这不起作用。但是,HTML页面上没有错误消息。

理想情况下,我想对如何进行调试提出一些建议。如果有什么具体的想法请告诉我,但是我也对解决这个问题的任何方式都感兴趣。感谢您的宝贵时间。

这是PHP

<?php
system('echo asdf > asdf.txt', $retval);
?>

这是HTML

<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.6/react.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.6/react-dom.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.js"></script>
</head>

<body>
<div id="root"></div>
<script type="text/babel">


class NameForm extends React.Component {

    constructor(props) {
        super(props);
        this.handleSubmit = this.handleSubmit.bind(this)
    }


    handleSubmit(){
            var xmlHttp = new XMLHttpRequest();
            xmlHttp.onreadystatechange = function() {
        }.bind(this)

        xmlHttp.open("GET","test.php",true)
        xmlHttp.send(null)
        event.preventDefault()
    }

    render(){
        return (
            <div style={{fontSize: 30}}>
                <form onSubmit={this.handleSubmit}><input style={{fontSize: 30}} type="submit" value="Submit"/></form>
            </div>
        )
    }


}

ReactDOM.render(
    <NameForm />,
    document.getElementById('root')
);


</script>
</body>

1 个答案:

答案 0 :(得分:0)

在PHP中,有时system()exec()和他们的朋友没有给我们任何错误消息。甚至我们将display_erros设置为On。作为一种解决方法,我建议您创建如下的自定义帮助函数:

function my_exec($cmd, $input=''){
    $proc=proc_open($cmd, array(0=>array('pipe', 'r'), 1=>array('pipe', 'w'), 2=>array('pipe', 'w')), $pipes);
    fwrite($pipes[0], $input);fclose($pipes[0]);
    $stdout=stream_get_contents($pipes[1]);fclose($pipes[1]);
    $stderr=stream_get_contents($pipes[2]);fclose($pipes[2]);
    $rtn=proc_close($proc);
    return array('stdout'=>$stdout,
        'stderr'=>$stderr,
        'return'=>$rtn
    );
}

var_export(my_exec('echo asdf > asdf.txt'));

我从http://php.net/manual/en/function.system.php#94929

获得了这些脚本

然后,您可以在浏览器“网络检查器”中检查结果。但是在指导您之前,我认为您的handleSubmit()函数存在问题。我相信它不会正确执行preventDefault()。因为我们使用的是React,默认情况下它将具有“合成事件”。我相信要正确地preventDefault(),我们应该做到:

handleSubmit(event){
  var xmlHttp = new XMLHttpRequest();
  xmlHttp.onreadystatechange = function() {
  }.bind(this)

  xmlHttp.open("GET","test.php",true)
  xmlHttp.send(null)
  event.nativeEvent.preventDefault();//This is how we really preventDefault() the native event, instead synthetic event
}

然后,在单击“提交”之后,您应该能够检查来自PHP脚本的响应。

Browser inspect

我建议将my_exec()用作调试的辅助函数。一旦感觉到它可以正常工作,请将其替换为system()exec()或您喜欢的任何东西。