0

我正在开发一个带有 html5 的 web 应用程序,带有 php 服务器的 javascript,我的问题是在 javascript 中的 ajax 调用中:

$.ajax({ 
      type: "POST",
      url: "http://localhost/pos.php",
      data: "lat="+lat+"&lon="+lon+"&nome=helena",
      dataType: "JSON",
      success: function(data){ 

      data = $.parseJSON(data);
        console.log(data + " im here!!");
      },

      error: function(jqXHR, textStatus, errorThrown ){
         console.log("POST: ", jqXHR, textStatus, errorThrown);
      }
    });

从 php 的一侧我运行一个脚本,最后我做了:

$arr = array ( 'a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5 );
echo json_encode($arr);

php返回数组,但是从javascript的角度来看,我无法在成功函数中访问它,在控制台中它说:

POST:  [url=""]Object { readyState=0,  status=0,  statusText="error"}[/url] error (an empty string)

我究竟做错了什么?我尝试了很多我在互联网上看到的方法,但我无法让它工作,有人可以帮助我吗?

4

3 回答 3

1

我已经对其进行了测试,并且一切正常。

你只需$.parseJSON(data);要从你的 JavaScript 中删除。然后它会起作用,因为如果您将数据类型设置为 JSON,jQuery 会自动为您执行此操作。

编辑:

如果 PHP 脚本位于不同的域中,您可以将以下 PHP 标头添加到脚本中:

<?php
    header('Access-Control-Allow-Origin: *');  
?>
于 2013-06-26T14:47:37.670 回答
0

无需使用普通的ajax。我在您的代码中发现了一些问题。请参阅下面的更正代码

php文件

  <?php
  header('Access-Control-Allow-Origin: *');
  $arr = array ( 'a'=>'1','b'=>'2','c'=>'3','d'=>'4','e'=>'5');
  echo json_encode($arr);
  ?>

Javascript 文件

 $.ajax({
 url : "http://localhost/pos.php",
 type : "POST",
 dataType : "JSON",
 data : {"lat":lat , "lon" : lon , "nome" : helena },
 error : function () { //statements }
 success : function(data)
        {
          alert(data.a);

        }
 });
于 2013-06-26T15:39:31.410 回答
0

试试这个,而不是你的 ajax 调用:

var xhr = getXMLHttpRequest();
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
       var json = JSON.parse(xhr.responseText);
       //Do whatever you want...
    }
};

xhr.open("POST", "pos.php", true);
xhr.send("lat="+lat+"&lon="+lon+"&nome=helena");

function getXMLHttpRequest() {
    var xhr = null;

    if (window.XMLHttpRequest || window.ActiveXObject) {
        if (window.ActiveXObject) {
            try {
                xhr = new ActiveXObject("Msxml2.XMLHTTP");
            } catch(e) {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            }
        } else {
            xhr = new XMLHttpRequest(); 
        }
    } else {
        alert("XMLHTTPRequest object not supported...");
        return null;
    }

    return xhr;
}
于 2013-06-26T14:52:57.077 回答