Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    4

    problema jquery con chiamata $.ajax

    ciao a tutti sono nuovo del forum, ho fatto una ricerca tra le varie discussioni aperte e non ho trovato nulla che potesse aiutarmi. ho anche eseguito delle ricerche su internet ma non riesco a risolvere il problema, che penso sia abbastanza banale.
    passo subito ad illustrarvi la mia situazione.

    ho un dominio su aruba ed ho scritto un web service in C# in formato .asmx, se mi collego all'indirizzo www.miodominio.it/mioWebService.asmx il servizio mi ritorna correttamente la pagina con i metodi presenti nel web service, cliccando su uno di essi mi apre la pagina di dettaglio completa del tasto invoke per poter effettuare il test. fin qui tutto ok il web service mi ritorna la risposta che io mi aspetto:

    This XML file does not appear to have any style information associated with it. The document tree is shown below.
    <string xmlns="http://miodominio.it/">Hello World</string>

    quindi alla luce di questo do per scontato che il web service funziona in maniera corretta. vi riporto di seguito anche il codice del web service

    <%@ WebService Language="C#" Class="mioWebService" %>

    using System;
    using System.Collections;
    using System.Data;
    using System.Web;
    using System.Web.Services;
    using System.IO;
    using System.Web.Script.Services;
    using System.Web.Script.Serialization;

    [WebService(Namespace = "http://miodominio.it/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    // Per consentire la chiamata di questo servizio Web dallo script utilizzando ASP.NET AJAX, rimuovere il commento dalla riga seguente.
    [System.Web.Script.Services.ScriptService]
    public class MioWebService : System.Web.Services.WebService
    {
    public MioWebService()
    {
    //
    // TODO: Aggiungere eventuale codice del costruttore necessario
    //
    }

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string HelloWorld()
    {

    return "Hello World";

    }

    }

    poi ho tentato di implementare la chiamata da una pagina html5 tramite la libreria jquery utilizzando la funzione $.ajax, di seguito riporto il metodo implementato

    $(document).ready(function() {
    $("#Prova").click(function() {

    requestToWS();

    });
    });

    function requestToWS() {

    var sUrl = "http://www.miodominio.it/mioWebService.asmx/HelloWorld";

    $.ajax({
    type: "POST",
    url: sUrl,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: "{}",
    success: function(data) {
    var data = eval('(' + data.d + ')');
    alert(data);

    $("#Prova").html("ok");
    },
    error: function(xhr, status, error) {
    alert(xhr.responseText);
    $("#Prova").html("ko");
    }
    });

    }

    mi accade che la chiamata ajax mi fa sempre in errore restituendomi questo messaggio

    XMLHttpRequest cannot load http://www.miodominio.it/mioWebService.asmx/HelloWorld. Origin null is not allowed by Access-Control-Allow-Origin.

    su internet sull'argomento si trovano moltissime info, il web service funziona, nella chiamata da jquery non ci vedo alcuna anomalia, da un pò di ricerche ho trovato un articolo nel quale si accennava al fatto che tento di chiamare il web service da un dominio diverso e che non fosse possibile.

    Questo programmino che sto scrivendo si tratta in sostanza di una piccola applicazioncina per dispositivi mobile, una galleria fotografica, dalla quale voglio caricare dinamicamente le immagini che ho sul mio dominio tramite l'interrogazione del web service.

    Secondo quello che dovrebbe essere il concetto di web service non dovrebbero esserci problemi di domini di appartenenza o sbaglio? qualcuno di voi riuscirebbe ad aiutarmi?

    grazie a tutti spero di essere stato abbastanza dettagliato nell'esposizione del mio problema.

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Ciao e benvenuto, ad essere sincero t'ho perso comunque se non l'hai già fatto vedi jsonp forse è la soluzione al tuo problema di dialogo tra due web server sempre che tu abbia la gestione di entrambi
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    4
    ciao Andrea grazie dell'informazione, avevo appena iniziato a vedere jsonp...a quanto pare il mio problema è dovuto proprio al fatto che non si può invocare un web service da un'altro dominio...devo approfondire la cosa. seguiranno aggiornamenti!

  4. #4
    Originariamente inviato da Drugo79
    ciao Andrea grazie dell'informazione, avevo appena iniziato a vedere jsonp...a quanto pare il mio problema è dovuto proprio al fatto che non si può invocare un web service da un'altro dominio...devo approfondire la cosa. seguiranno aggiornamenti!
    Anche abilitare CORS è un alternativa, se non devi supportare i vecchi IE: http://en.wikipedia.org/wiki/Cross-o...source_sharing
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    4
    ciao Max, ho dato un'occhiata alla tua segnalazione, davvero molto interessante come cosa ma mi da qualche problema non riesco a farla funzionare, ricevo sempre il messaggio
    ---------------------------------------------------------------------------------------
    XMLHttpRequest cannot load http://www.miodominio.it/mioWebService.asmx/HelloWorld. Origin null is not allowed by Access-Control-Allow-Origin.
    ---------------------------------------------------------------------------------------


    questa è la chiamata ajax, ho notato che c'era la proprietà crossDomain l'ho settata a true ma nulla niente da fare.

    $.ajax({
    type: "POST",
    async: false,
    url: sUrl,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    crossDomain: true,
    data: "{}",
    success: function(data) {

    $("#Prova").html("ok");

    },
    error: function(XMLHttpRequest, status, error) {
    $("#Prova").html("ko");

    }
    });

    settandogli invece il type a GET e il dataType a jsonp riesco a superare quel problema. solo che mi va in errore dopo con questo messaggio
    ---------------------------------------------------------------------------------------
    Resource interpreted as Script but transferred with MIME type text/xml: "http://www.miodominio.it/cgi-bin/mioWebService.asmx/HelloWorld?callback=jQuery16406584412627853453_135 2050079149&{}&_=1352050083837".
    send
    f.extend.ajax
    requestToWS
    (anonymous function)
    f.event.handle
    i.handle.k jquery

    Uncaught SyntaxError: Unexpected token <
    ---------------------------------------------------------------------------------------
    dalla console di chrome ho visto che la stringa json mi ritorna innestata in un file xml, riporto in seguito

    <?xml version="1.0" encoding="utf-8"?>
    <string xmlns="http://miodominio.it/">{"name":"Marco","age":33,"city":"Milano"}</string>

    non riesco a capire come risolvere. di seguito riporto il codice del web service modificato
    --------------------------------------------------------------------------------------
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    using System.Web.Script.Services;
    using System.Web.Script.Serialization;

    [WebService(Namespace = "http://miodominio.it/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    // Per consentire la chiamata di questo servizio Web dallo script utilizzando ASP.NET AJAX, rimuovere il commento dalla riga seguente.
    [System.Web.Script.Services.ScriptService]
    public class mioWebService : System.Web.Services.WebService
    {
    public mioWebService()
    {
    //
    // TODO: Aggiungere eventuale codice del costruttore necessario
    //
    }

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)]
    public string HelloWorld()
    {
    var json = new JavaScriptSerializer().Serialize(new
    {
    name = "Marco",
    age = 33,
    city = "Milano"
    });
    //HttpContext.Current.Response.ContentType = "application/json; charset=utf-8";
    //HttpContext.Current.Request.ContentType = "application/json; charset=utf-8";

    HttpContext.Current.Response.ClearHeaders();
    HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*");
    HttpContext.Current.Response.AppendHeader("Content-Type", "application/json");
    HttpContext.Current.Response.AppendHeader("Accept" , "application/json");
    HttpContext.Current.Response.ContentType = "application/json";

    return json;

    }
    }
    ----------------------------------------------------------------------------------

    come potete notare dal web service ho provato delle forzature XMLSerializeString a false svuotare l'Headers e ripopolarlo con nuovi valori da me impostati. ma dalla console di chrome vedo sempre che il content-type della response è sempre settato a text/xml. e di conseguenza mi salta fuori il messaggio del MIME e del token inaspettato.
    qualcuno di voi sa aiutarmi?
    la cosa brutta è che in giro su internet sembrano tutte cose banali e poi non capisco perchè non funzionano...sarò tardo mi sa...

    grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.