XMLhttprequest.send()不向PHP发送变量

时间:2017-06-23 08:17:52

标签: javascript php ajax

我有这段代码。

JAVASCRIPT

function removeAndReplace(id, sezione){
   var xhttp = new XMLHttpRequest();

   xhttp.onreadystatechange = function() {
      if (xhttp.readyState == 4 && xhttp.status == 200) {
         alert(xhttp.responseText);
      }
   }

   xhttp.open("POST", "removeAndReplace.php", true);
   xhttp.send("id=" + id + "&sezione=" + sezione);
}

PHP

 print_r($_POST);

 $id = $_POST['id'];
 $sezione = $_POST['sezione'];
 .
 .
 .    

HTML

<input type="button" value="Elimina" class="btn_elimina" onClick="removeAndReplace(1, 'Shopping')">

我想在点击按钮后调用PHP函数,所以我读到更好的方法是使用AJAX。

Firefox和Chrome会返回以下错误消息:

  

阵   (   )   
  注意 C:\ pweb \ tools \ xampp \ htdocs \ Bazaar \ php \ removeAndReplace.php 6 <未定义索引:ID登记/>   
  注意:未定义索引:sezione在 C \ pweb \ tools \ xampp \ htdocs \ Bazaar \ php \ removeAndReplace.php 7 < BR />

第6行是:$ id = $ _POST ['id']; 第7行是:$ sezione = $ _POST ['sezione'];

我哪里错了?

1 个答案:

答案 0 :(得分:1)

您正在将数据转储到请求正文中,而不告诉服务器如何格式化。

由于PHP不知道你已经用它理解的编码发送了数据,它忽略了请求体。

您需要添加:

xhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

...在您发送请求之前。

除了

虽然您的硬编码数据没有特殊字符,但最佳做法是对数据进行编码。这样可以避免将来的麻烦:

xhttp.send("id=" + encodeURIComponent(id) + "&sezione=" + encodeURIComponent(sezione));

您可以省去手动编码数据的麻烦,并且必须使用FormData API设置自己的内容类型:

var data = new FormData();
data.append("id", id);
data.append("sezione", sezione);

xhttp.open("POST", "removeAndReplace.php", true);
xhttp.send(data);