2013-06-26 128 views
0

我開發HTML5的web應用程序,JavaScript和PHP的服務器,我的問題是在JavaScript中的Ajax調用:PHP服務器/ 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) 

我在做什麼錯?我試圖用我在互聯網上看到的很多方式來做到這一點,但我無法讓它工作,有人可以幫助我嗎?

+2

你看到了什麼,當你獨自執行PHP腳本?它會返回你想要的JSON嗎? – casraf

+0

嘗試發送這樣的數據:data:{lat:lat,lon:lon,nome:'helena'}和你的PHP:$ arr ['result'] = array('a'=> 1,'b'= > 2,'c'=> 3,'d'=> 4,'e'=> 5); echo json_encode($ arr); – karmafunk

+0

要訪問從jQuery中的ajax/post調用返回的json數據,您將需要訪問數據,如對象,所以數據。[你返回的名稱] –

回答

1

我測試過它,everthing工作正常。

你只需要從你的JavaScript中刪除$.parseJSON(data);。 然後它會工作,因爲如果您將數據類型設置爲JSON,jQuery會自動爲您執行此操作。

編輯:

如果PHP腳本是您可以在下面的PHP頭添加到您的腳本不同的域:

<?php 
    header('Access-Control-Allow-Origin: *'); 
?> 
+0

我成功了:function(data){ console.log(data +「im here !!」); },但即時獲得相同的錯誤... – rmalta

+0

也許你的jQuery版本有問題,因爲沒有$ .parseJSON的代碼在這裏工作正常。 –

+0

我正在加載jquery-1.9.1.js和jquery.mobile-1.3.0.js。它可能是別的東西,或即將發瘋,因爲即時通訊做例子中的所有事情,這不是一個複雜的事情 – rmalta

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; 
} 
+0

它說:SyntaxError:JSON.parse:意外的數據結束 [Break On This Error] \t var json = JSON.parse(xhr.responseText); ||這是什麼意思? – rmalta

+0

嘗試執行「alert(xhr.responseText)」以在導致問題的指令之前查看其內容。 php文件返回的json字符串可能是錯誤的。 – Lucas

0

不需要使用正常的ajax。我發現在你的code.See一些問題,下面

校正碼

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); 

     } 
}); 
+0

謝謝!我也需要:header('Access-Control-Allow-Origin:*');在PHP的頂部,所以它的工作原理。 – rmalta