он никогда не работал для меня иначе, чем с использованием JavaScript, как предлагалось NICCAI в самом первом ответе. Я использую этот подход для масштабирования <div>
с помощью Google Maps.
Вот полный пример того, как это сделать (работает в Safari / FireFox / IE / iPhone / Andorid (работает с вращением)):
CSS
body {
height: 100%;
margin: 0;
padding: 0;
}
.header {
height: 100px;
background-color: red;
}
.content {
height: 100%;
background-color: green;
}
JS
function resize() {
// Get elements and necessary element heights
var contentDiv = document.getElementById("contentId");
var headerDiv = document.getElementById("headerId");
var headerHeight = headerDiv.offsetHeight;
// Get view height
var viewportHeight = document.getElementsByTagName('body')[0].clientHeight;
// Compute the content height - we want to fill the whole remaining area
// in browser window
contentDiv.style.height = viewportHeight - headerHeight;
}
window.onload = resize;
window.onresize = resize;
HTML
<body>
<div class="header" id="headerId">Hello</div>
<div class="content" id="contentId"></div>
</body>
Вероятно, ошибка в $ .param ().
data: $.param({ table: table.toString(), column: column.toString(), value: value.toString(), whereColumn: whereColumn.toString(), whereValue: whereValue.toString() })
$. Param () является функцией JQuery.
Проверьте это: AngularJSParamSerializer
Попробуйте без кодирования / декодирования json проверить, работает ли он.
РЕДАКТИРОВАТЬ (комментарий ответчика): «В вашем php попробуйте echo file_get_contents('php://input') ;
и в javascript в обратном вызове запроса console.log(response);
Чтобы увидеть, если некоторые данные успешно отправлены.
Попробуйте не использовать $ .param () для данных. Вы можете отправить объект данных напрямую.
$scope.updatePhp = function(table, column, value, whereColumn, whereValue) {
console.log("Updating. Table: " + table + ", column: " + column + ", value: " + value + ", where: " + whereColumn + ", whereValue: " + whereValue);
$http({
method: 'POST',
url: 'update-data.php',
data: {
table: table.toString(),
column: column.toString(),
value: value.toString(),
hereColumn: whereColumn.toString(),
whereValue: whereValue.toString()
},
headers: { 'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8' }
}).then(function successCallback(response) {
console.log("Success.");
}, function errorCallback(response) {
console.log("Error.");
});
}
Проблема была в том, как данные были отформатированы. Вот моя напечатанная переменная $info
:
{"table":"achievements","column":"Goal","value":1,"whereColumn":"id","whereValue":"1"}
Строка из file_get_contents('php://input')
заключена в фигурные скобки, и каждое значение отделяется запятыми, оба из которых мне пришлось удалить.
Мне также пришлось избавиться от кавычек для каждой пары ключ-значение строки, и, поскольку все, что я хотел, это значение, мне пришлось избавиться от всего, начиная с :
и до («ключ», если вы будет).
Вот мой (хотя и хакерский) результат, который отлично сработал:
//PHP posted info
$info = file_get_contents('php://input');
$dataArr = explode(',',$data);
$dCount = 0;
foreach ($dataArr as $datum) {
$newDatum = substr($datum, strpos($datum, ":") + 1);
$newDatum = str_replace(array('}', '{', '"'), '', $newDatum);
$dataArr[$dCount] = $newDatum;
$dCount++;
}
$table = $dataArr[0];
$column = $dataArr[1];
$value = $dataArr[2];
$whereColumn = $dataArr[3];
$whereValue = $dataArr[4];