![](/img/trans.png)
[英]Javascript/ajax/php question: sending from server to client works, sending from client to server fails
[英]php server/ javascript client ajax
我正在使用html5和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)
我究竟做錯了什么? 我已經嘗試了很多在互聯網上看到的方式來做到這一點,但是我無法使其正常工作,有人可以幫助我嗎?
我已經對其進行了測試,並且一切正常。
您只需要刪除$.parseJSON(data);
從您的JavaScript。 然后它將起作用,因為如果將數據類型設置為JSON,則jQuery會自動為您執行此操作。
編輯:
如果PHP腳本位於其他域中,則可以將以下PHP標頭添加到腳本中:
<?php
header('Access-Control-Allow-Origin: *');
?>
試試這個,而不是您的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;
}
無需使用普通的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);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.