【发布时间】:2017-08-05 01:32:19
【问题描述】:
新手,第 1 篇文章(绝望)。我试图让一个基本的 html->javascript->ajax(POST)->php 事务(带有传递的参数)工作。 [我也尝试过(GET),但应该使用 POST 来修改服务器状态。对]。
我的问题:虽然通过 POST (js->ajax->php) 传递的参数确实出现在 Firefox 的开发人员工具-> 网络选项卡中看到的参数列表中,但 PHP 代码没有看到它(并且 isset() = 0).
我的 php 代码确实执行得很好...我正在通过将内容记录到磁盘文件来进行调试。我的 SWAG 是我用来组装通过 .send() 发送的参数的语法有问题; [在下面的例子中jsMyFunc()]。我已经尝试了在许多 www.sites 上找到的所有可能的建议,但我没有想法。
我在 W7/64 上使用 Firefox 54.0.1 与 Rasperry Pi 3B 交谈。 Apache 也在其中。我有大量其他代码在工作(HTML+JS+PHP(服务器端)等,但这个让我很难过。我对其中的大部分内容都比较陌生,所以我的代码改编自 <sarcasm>plethora 的无缺陷示例可以在 www</sarcasm> 上找到,但我已经花了 12 多个小时阅读、测试、阅读等,因此这篇文章。我将代码简化到最低限度,所以也许你们中的一个可以提供帮助?
另外,(冒着贪婪的风险),发送 2 个文本参数的语法是什么?我试图这样做很长一段时间,直到我意识到传递单个参数也不起作用。我想向服务器发送 2 个参数:gpio_bit 和 state(见下文)。
拜托,不需要告诉我这是一个重复的错误...去过那里,阅读所有内容。而且我真的不想学jquery,为了一个很简单的需求KISS。非常感谢任何帮助。
主要(整个文件)
<!DOCTYPE html>
<html>
<head>
<script src='jsMyJS.js'></script>
</head>
<body>
<b><button type='button' onclick='jsMyFunc()'>Test</button></b>
</body>
</html>
Javascript:jsMyJS.js(整个文件)
function jsMyFunc() {
console.log('Executing: jsMyFunc()');
var gpio_bit = 4;
var state = 0;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if( this.readyState == 4 ) {
if( this.status == 200 ) {
alert( 'DONE' );
} else {
alert( 'ERROR: status = ' + status );
}
}
}
xhttp.open( 'POST', 'pMyPHP.php', true );
xhttp.setRequestHeader( 'Content-Type', 'text/plain', 'Content-length', state.length ); // Or 'text'
var myArgs = 'state=' + state; // <<<<<<<<<< HERE ???
xhttp.send( myArgs );
}
PHP:pMyPHP.php(整个文件)
<?php
// Using file writes to debug server code... sigh...
$f = fopen("debug.txt", "w");
fwrite( $f, "\nExecuting: pMyPHP.php()\n" );
$str = "xxxx";
fwrite( $f, "str 1 = " . $str . "\n" ); // OK
if (isset($_POST['state'])) {
$str = $_POST['state'];
fwrite( $f, "str 2 = " . $str . "\n" ); // NEVER
} else {
fwrite( $f, "str 3 = NULL\n" ); // ALWAYS
}
fclose( $f );
?>
【问题讨论】:
-
我很懒,只用
$.post( url, {input:"stuff"}, function(data){ ... });jQuery :-p
标签: javascript php ajax