早上好!
我正在编写一个小型AJAX应用程序,使用this函数作为基础,并使用php作为服务端语言。
这是涉及的JavaScript代码
var dati = {};
dati.nome = d.getElementById('nome').value;
dati.cognome = d.getElementById('cognome').value;
console.log(dati);
url = "post.php";
jsonToPost = dati;
console.log(url);
processResponse = function(responseText){
console.log(responseText);
d.getElementById('response').innerHTML = responseText;
}
_SU3.postAjax(url, processResponse, jsonToPost);
});
这是我的PHP代码,只是一个测试ajax的后处理器
<?php
if(isset($_POST['nome'])){
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$data['nome'] = $nome;
$data['cognome'] = $cognome;
$data = json_encode($data);
echo $data;
} else {
echo "Errore!";
}
?>
我从ajaxRequest获得的回复是“Errore!”,这意味着它没有向脚本发布任何内容。
我错过了任何明显的错误吗?或者有些事情我完全错了?
_SU3.ajax()函数(参见this以供参考)工作正常,所以我很惊讶它不起作用
---编辑广告萤火虫的回应--- 我希望我发布正确的东西
request headers:
POST /~francesco/post.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/2010010 Firefox/16.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost/~francesco/ajax.html
Content-Length: 26
Pragma: no-cache
Cache-Control: no-cache
Screenshot 在屏幕截图中还有其他信息。
答案 0 :(得分:3)
您可能想要替换该行:
ajaxRequest.send("data=" + encodeURIComponent(data));
在_SU3.postAjax中:
ajaxRequest.send(data);
然后将第三个参数(jsonToPost)发送为如下字符串:
"nome=arg1&cognome=arg2"
例如:
"nome="+d.getElementById("nome").value + "&cognome="+d.getElementById("cognome").value`
答案 1 :(得分:2)
正如puckipedia建议的那样,您需要将要发送的对象编码为查询字符串。以下方法将根据传入的对象创建参数字符串:
_SU3.postAjax = function(url, callback, data) {
var parameters = '';
for (var p in data){
parameters += p + '=' + encodeURIComponent(data[p]) + '&';
}
var ajaxRequest = _SU3.getAjaxRequest(callback);
ajaxRequest.open("POST", url, true);
ajaxRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajaxRequest.setRequestHeader("Connection", "close");
ajaxRequest.send(parameters);
}
您提供的链接中建议的功能是假设您传入的是JSON,而不是js对象。
注意:您发布的服务器代码应正确解释数据:
$nome = $_POST['nome'];