Войти
ПрограммированиеФорумВеб

phaser.js + django client server communication

#0
11:11, 3 окт. 2015

нет ли какой библиотеки, которая облегчит обмен данными между js и python?

полазил в инете нашел только пару библиотек под js & node.js :(

вручную запарился писать, получилось только с сервака json получить

как на сервер данные отправить без перезагрузки страницы еще не нашел :(


#1
20:19, 3 окт. 2015

despair1
> как на сервер данные отправить без перезагрузки страницы еще не нашел :(
))) Есть объект xml_http_request для этих целей. Почти во всех js движках есть обвязка-полифил в т.ч. и в PhaserJS
http://xmlhttprequest.ru

#2
19:07, 7 окт. 2015

к сожалению не нашел обвязки xml_http_request в phaser, может лучше использовать jquery? а то меня реализация кросбраузерности пугает

#3
19:45, 7 окт. 2015

а почему вот на это:

def recive_json(request):
    j={"max":50,
       "own":[
              [1,2,50],
              [2,3,15],
              [3,7,45]]}
    print "forbiden"
    return JsonResponse(j)
var host ="http://127.0.0.1:8000/game/"
function sendJson() {
  var arr = { City: 'Moscow', Age: 25 };
  $.ajax({
      url: host+'send.json',
      type: 'POST',
      data: JSON.stringify(arr),
      contentType: 'application/json; charset=utf-8',
      dataType: 'json',
      async: true,
      success: sendComplete
  });
}
function sendComplete(msg) {
  alert(msg)
}

сервер выдает :

[07/Oct/2015 16:39:02] "POST /game/send.json HTTP/1.1" 403 2274

и не печатает forbiden?

#4
20:52, 7 окт. 2015

вроде исправил скопипастив со стекаоверфлоу, но не понял как все это работает:

function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie != '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
          console.log(cookies[i])
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}

function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}

function sendJson() {
  //alert(csrftoken)
  //var a=document.getElementsByName('csrfmiddlewaretoken')[0].value
  var csrftoken = getCookie('csrftoken');
  $.ajaxSetup({
      beforeSend: function(xhr, settings) {
          if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
              xhr.setRequestHeader("X-CSRFToken", csrftoken);
          }
      }
  });
  //alert(getCookie('csrftoken'))
  var arr = { City: 'Moscow', Age: 25 };
  $.ajax({
      url: host+'send.json',
      type: 'POST',
      data: JSON.stringify(arr),
      contentType: 'application/json; charset=utf-8',
      dataType: 'json',
      async: true,
      success: sendComplete
  });
}
function sendComplete(msg) {
  console.log(msg)
  alert("hello")
}

@csrf_protect
@login_required
def index(request):
    print request.user.username,"uname"
    return render(request,"game/index.html",{"error_message1":"",
                                             'username':request.user.username,
                                                 }) 
    return HttpResponse("you in index")

def test_json(request):
    j={"hello":"aaa","phaser":2}
    return JsonResponse(j)

def recive_json(request):
    j={"max":50,
       "own":[
              [1,2,50],
              [2,3,15],
              [3,7,45]]}
    print "forbiden"
    #return HttpResponse("you in index")
    return JsonResponse(j)
#5
15:37, 12 окт. 2015

разобрался с этой ересью, нада просто файлик к страничке добавить и  post запросы из js будут проходить в джанго безо всяких заморочек:

function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie != '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
          //console.log(cookies[i])
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}



function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}

window.onload = function () {
  var csrftoken = getCookie('csrftoken');
  $.ajaxSetup({
      beforeSend: function(xhr, settings) {
          if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
              xhr.setRequestHeader("X-CSRFToken", csrftoken);
          }
      }
  });
  
}
ПрограммированиеФорумВеб

Тема в архиве.