Почему сервер не получает мои данные POST? - PullRequest
0 голосов
/ 01 апреля 2012

Я пытаюсь отправить простой POST в веб-службу, но сервер, похоже, не получает данные POST. Это Аякс:

popup.js

$.ajax({
        url: 'http://www.flags.99k.org/removeFlag.php',
        type: 'POST',
        data: "UID=6",
        dataType: 'json'
    }).done(function(response)
    {
        $('<p />').text('response: ' + response.success).appendTo($('body'));
    });
  • Я ожидаю, что response.success будет 1, что будет означать, что сообщение было успешным.
  • Я также мог бы получить 0, что означало бы, что mysql_query(...) вернул false.
  • Но вместо этого я получаю -1, что означает, что isset($_POST['UID']) возвращает false.

... / removeFlag.php

<?php
    include("DB.php"); // connects and selects database.
    if(isset($_POST['UID'])) {
        $sql_removeFlag = "DELETE FROM Flags WHERE UID = " . $_POST['UID'] . ";";
        $success = mysql_query($sql_removeFlag);
        $jsonStr = ("{ \"success\":\"" . $success . "\"}");
        echo $jsonStr;
    } else {
        echo("{ \"success\": -1 }");
    }
?>

Я пробовал разные способы форматирования данных ('uid' = 6, {uid: 6}, {'uid': 6}, ...), но ни один из них не работал.

Ajax запускается из всплывающего окна расширения Google Chrome, но я добавил целевой адрес в список разрешений.

manifest.json

{
  "name": "Ajax POST",
  "version": "1.0",
  "description": "Ajax POST from popup on click.",
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "permissions": [
      "flags.99k.org/*",
      "http://flags.99k.org/*",
      "http://www.flags.99k.org/*"
  ]
}

1 Ответ

1 голос
/ 01 апреля 2012

Вы можете использовать json_encode($array) для кодирования массива в JSON.

$response['success'] = $success;
$jsonStr = json_encode($response);

Также важно убедиться, что ваш ajax php файл ничего не кэширует.

header("Expires: Thu, 15 Dec 2011 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

Выше может быть не ответ, но я надеюсь, что это поможет вам предотвратить некоторые возможные ошибки.

...