使用带有jQuery的XMLHttpRequest将JSON数据发送到PHP

前端之家收集整理的这篇文章主要介绍了使用带有jQuery的XMLHttpRequest将JSON数据发送到PHP前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用 XMLHttpRequest对象从表单发送 JSON数据.我可以使用以下函数发送数据. FireBug中没有显示错误,请求中的JSON数据显示为FireBug.

但是,我将数据发送到echo.PHP,简单地返回内容

  1. <?PHP
  2. print_r($_POST);
  3. print_r($_GET);
  4. foreach (getallheaders() as $name => $value) {
  5. echo "$name: $value\n";
  6. }
  7. echo file_get_contents('PHP://input');
  8. ?>

POST数组始终为空,但我可以看到file_get_contents返回的JSON字符串.这是怎么发生的?我究竟做错了什么?

echo.PHP输出

  1. Array
  2. (
  3. )
  4. Array
  5. (
  6. )
  7. Host: localhost
  8. User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
  9. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  10. Accept-Language: eo,de-de;q=0.8,de;q=0.6,en-us;q=0.4,en;q=0.2
  11. Accept-Encoding: gzip,deflate
  12. Connection: keep-alive
  13. Content-Type: application/json; charset=utf-8
  14. Referer: http://localhost/form.html
  15. Content-Length: 88
  16. Cookie: {{..to much data..}}
  17. Pragma: no-cache
  18. Cache-Control: no-cache
  19. {"type":"my_type","comment":"commented"}

发送功能

  1. function submit(){
  2. var data={};
  3. data.type=document.form.type.value;
  4. data.comment=document.form.comment.value;
  5.  
  6. //get right XMLHttpRequest object for current browsrer
  7. var x=ajaxFunction();
  8.  
  9. var string = JSON.stringify(data);
  10.  
  11. x.open('POST','echo.PHP',true);
  12. x.setRequestHeader('Content-type','application/json; charset=utf-8');
  13. x.setRequestHeader("Content-length",string.length);
  14. x.setRequestHeader("Connection","close");
  15.  
  16. x.onreadystatechange = function(){
  17. if (x.readyState != 4) return;
  18. if (x.status != 200 && x.status != 304) {
  19. alert('HTTP error ' + req.status);
  20. return;
  21. }
  22.  
  23. data.resp = JSON.parse(x.responseText);
  24. if(data.resp.status=='success'){
  25. alert('That worked!');
  26. }else{
  27. alert('That didn\'t work!');
  28. }
  29. }
  30. x.send(string);
  31.  
  32. return false; //prevent native form submit
  33. }

解决方法

您忘了在send函数中命名变量.
使用它的好方法
  1. x.send('name1='+string+'&name2=value2');

鉴于此,我认为你将不得不改变内容长度标题.我不认为发送它是有用的.

您可以做的另一件事是尝试使用GET方法.
您还可以尝试通过以下方式更改内容类型标头:

  1. xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded")

猜你在找的jQuery相关文章