Domanda

Si è sorta di un problema spinoso.

Sto lavorando su un progetto in cui abbiamo bisogno per consentire stampe di ricevute quando gli utenti controllare sul nostro sito in un chiosco. Per motivi di driver e la formattazione, sto usando l'automazione COM con Word per gestire stampare le ricevute. Ho avvolto questo codice in un servizio web che gira su un computer locale.

Il piano era quello di mettere una semplice chiamata ajax jQuery nella pagina HTML per l'url della macchina locale che esegue il servizio web. Questa chiamata ajax contiene un oggetto JSON dell'ordine, che viene deserializzare dal servizio web e stampato. Funziona bene se uso localhost, tuttavia nella produzione correrò conflitto con nessun dominio chiamate ajax regola croce.

Un proxy non funzionerà perché il codice in esecuzione sul sito web non riesce a contattare il servizio web locale che esegue il servizio di stampa. Dopo aver frugato sul web, ho scoperto che utilizzando JSONP può essere una soluzione a questo, ma non riesco a capire come farlo funzionare. La maggior parte dei tutorial presuppongono che si sta tentando di ottenere alcuni dati remoti piuttosto che solo i dati semplicemente distacco. Il servizio di stampa web restituisce void.

Come faccio a configurare il mio servizio web (ASMX) per lavorare con JSONP e quale sarebbe il mio codice jQuery assomigliare? Attualmente sembra qualcosa di simile:

function printReceipt(data) {
   $.ajax({
       type: "POST",
       url: "http://192.9.200.165/ContestWebService/Service1.asmx/PrintOrderReceiptJson",
       data: data,
       dataType: "json",
       contentType: "application/json; charset=utf-8",
       error: function(xhr, msg) { alert(xhr.statusText); }
    });
}

Le eventuali alternative più semplici a JSONP, o qualsiasi altre possibili soluzioni che potrebbero non essere considerati sarebbe utile pure.

È stato utile?

Soluzione

JSONP aggiunge semplicemente un tag script alla sezione head e, quindi, è limitato solo a richieste GET. Al fine di configurare il servizio web ASMX per gestire JSONP dovrai gestire la serializzazione manualmente:

[WebMethod]
[ScriptMethod(UseHttpGet=true, ResponseFormat=ResponseFormat.Json)]
public string Foo()
{
    var json = new JavaScriptSerializer().Serialize(new 
    {
        Prop1 = "some property",
    });
    string jsoncallback = HttpContext.Current.Request["jsoncallback"];
    return string.Format("{0}({1})", jsoncallback, json);
}

E il lato client:

$.getJSON("http://192.9.200.165/ContestWebService/Service1.asmx/PrintOrderReceiptJson?jsoncallback=?",
    function(data) {
        alert(data);
    });

Un'altra alternativa per il dominio croce chiamate AJAX è quello di utilizzare Flash .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top