2013-04-23 8 views
6

Próbuję zwolnić plik XMLHttpRequest do mongoDB w celu pobrania dokumentu za pośrednictwem AJAX.Wniosek REST AJAX do mongoDB

To jest mój kod:

function getJsonDocumentByModeldid(model_id) { 
    var valoreInput = document.getElementById('inputModelId').value; 
    alert(valoreInput); 

    $.ajax({ 
     url: "http://localhost:28017/test/", 
     type: "get", 
     //data: "filter_a=" + valoreInput, 
     dataType: 'jsonp', 
     crossDomain: true, 

     success: function (data) { 
     alert("success"); 
     //var json2javascript = $.parseJSON(data); 
     manageLayout(); 
     }, 

     error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert("Status: " + textStatus + " Error:" + errorThrown); 
     } 
    }); 
} 

Moja funkcja zawsze zwraca błąd. Więc jaki jest problem?

+1

Jaki jest błąd? – andyb

+0

Żądanie ajax nie powiedzie się ze skryptem, zamiast tego, jeśli skopiować adres URL w przeglądarce, odpowiedź serwera z powodzeniem. Nie wiem, jaki jest problem ... – ilamaiolo

+0

Błąd alertu to Jqueryxxxxxx nie został wywołany! – ilamaiolo

Odpowiedz

6

Ta funkcjonalność jest obsługiwany jako część Simple (read-only) REST Interface ale aby domenę przekrój zwraca się --jsonp inaczej będzie podlegać problemu Same origin policy, ponieważ adres IP i port, który został składającego wniosek nie pasuje do adresu IP i port, na którym działa mongoDB.

Uruchom mongoDB z mongod.exe --rest --jsonp (plus wszelkie inne opcje).

Następująca przykładowa strona może być wyświetlana za pośrednictwem serwera WWW (na przykład Apache HTTP Server) lub po prostu zapisana lokalnie i załadowana do przeglądarki jako plik . Żądanie dotyczy informacji o dbCollection nazywa andyb, które stworzyłem w MongoDB najpierw:

db.createCollection('andyb'); 

HTML

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
    <title>mongoDB AJAX demo</title> 
    <script type='text/javascript' src='http://code.jquery.com/jquery-1.9.1.js'></script> 
    <script type='text/javascript'>//<![CDATA[ 
    $(function(){ 
    $.ajax({ 
     url: 'http://localhost:28017/local/andyb', 
     type: 'get', 
     dataType: 'jsonp', 
     jsonp: 'jsonp', // mongod is expecting the parameter name to be called "jsonp" 
     success: function (data) { 
     console.log('success', data); 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
     console.log('error', errorThrown); 
     } 
    }); 
    });//]]> 
    </script> 
</head> 
<body> 
</body> 
</html> 

Wiele przeglądarek obsługuje CORS teraz który jest alternatywą (bardziej nowoczesny) sposób na ułatwienie korzystania z zasobów międzydomenowych.

+0

Wielkie dzięki za odpowiedź! – ilamaiolo

0

poprzedniej odpowiedzi mogą być modyfikowane za pomocą odroczonych obiektów (zobacz tę dobrą przewodnik: "How do I return the response from an asynchronous call?):

<!doctype html> 
<meta charset="utf-8"> 
<title>mongoDB AJAX demo</title> 
<script src="http://code.jquery.com/jquery-latest.min.js" ></script> 
<script>  
    $(function(){ 
    // add rest = true and jsonp = true to /etc/mongodb.conf, 
    // then restart mongodb 
     $.ajax({ 
       url: "http://localhost:28017/local/startup_log/", 
       type: 'get', 
       dataType: 'jsonp', 
       jsonp: 'jsonp', // mongodb is expecting that                      
      }) 
      .done(function(data) { 
       d=JSON.stringify(data,undefined,1); 
       $("code").text(d).css("color","green"); 
      }) 
      .fail(function(request,status,error) { 
       $("code").text("get failed: "+error).css("color","red"); 
      }) 
      .always(function() { 
       console.log("finished") 
      }) 

    }); 
</script> 
<body> 
    <pre> 
    <code> 
    </code> 
    </pre> 

W każdym razie, w obu przypadkach obsługa error: i fail() działa tylko jeśli port nie jest warunkiem . Na przykład:

url:"localhost/asdasdasd" 

wyniki w obsługę błędów, natomiast

url:"localhost:28017/asdasdasd" 

skutkuje 404 dziennik w konsoli w następujący sposób:

GET http://localhost:28017/?jsonp=jQuery110207253803350031376_1383522587177&_=1383522587178 404 (OK) 
Powiązane problemy