下面的脚本返回一个失败,尽管它过去是有效的:
function postToPHP(data_to_send) {
$.ajax({
type: "POST",
datatype: "json",
async: false,
url: "http://school.edu/myurl/write_to_mongo.php",
data: data_to_send,
success: function ($msg) {
alert('success');
return;
},
error: function () {
alert('failure to send to database');
}
});
如果它很重要,它会与以下PHP脚本进行交互:
//Get data from .ajax call
$data = $_POST;
//Open mongo and select database
$m = new Mongo();
$db = $m->selectDB("numbers");
//select a collection
$collection = $db->testData;
//insert data
$collection->insert($data);
//find collection contents
$cursor = $collection->find();
echo $data;
?>
知道出了什么问题吗?我的Safari调试器显示"加载资源失败。服务器的响应不正确。",但在谷歌上搜索并没有产生任何有用的结果;我已经确保我正确地导入了jQuery。
将url放入地址栏时,无法在http://school.edu/myurl/write_to_mongo.php
找到服务器。此外,他们还必须允许CORS。因此,如果他们确实允许CORS,那么服务器就会关闭,否则就是同源策略问题。
读取Same_origin_policy。
AJAX只能在同一个域url内进行通信。
检查是否找不到页面url。
function postToPHP(data_to_send) {
$.ajax({
type: "POST",
datatype: "jsonp", //for crossDomain request
async: false,
crossDomain: true, //crossDomain request
url: "http://school.edu/myurl/write_to_mongo.php",
data: data_to_send,
success: function ($msg) {
alert('success');
return;
},
error: function () {
alert('failure to send to database');
},
statusCode: {
404: function () { // if page is not found
alert("page not found");
}
}
});
}
如何获得跨来源资源共享(CORS)请求后工作
JSONP的全部内容是什么?
我最终修复了这个问题,将.ajax请求中的url设置为本地,例如:
url: "write_to_mongo.php"
无论出于何种原因,提供完整的url都会导致它被视为来自不同的域,即使它不是。