2012-04-19 1 views
1

Может ли кто-нибудь дать мне четкое прохождение игры, как вызвать обработчик ashx с jsonp или сказать мне, что я делаю неправильно? У меня есть функция javascript на одном субдомене, пытающемся вызвать обработчик ashx на другом подобласте. Когда я пытаюсь, я возвращаю статус 200, но он все еще попадает в мою обработку ошибок и сообщает об ошибке thrownError of SyntaxError: Invalid character. Я нашел пару потоков на jquery и jsonp, но только тот, который фактически показал какой-либо код, связанный с ashx. К сожалению, он, похоже, не работает, и я не знаю, почему. Вот код из вызова javascript, а затем ответ ashx.с помощью jsonp с обработчиком ashx

var sPay = getEl('chkPay').checked ? "pay=1" : ""; 
var sUrl = "/Calculator/GetCalcResult.ashx?jsoncallback=?" + sPay; 

$.getJSON(sUrl, function (data) { 
    console.log("Success:" + data); 
}).error(function (xhr, ajaxOptions, thrownError) { 
    console.log("Status:" + xhr.status); 
    console.log("Error:" + thrownError); 
}); 

И тогда обработчик ASHX ...

var jsonstr = 
       "{\"calculatorresults\":{" + 
        "\"employees\" : \"" + employeeCount + "\"" + 
        "\"pay\" : \"" + calculationResult.PayTotal + "\"" + 
        "\"total\" : \"" + calculationResult.Total + "\"" + 
       "}}"; 

      context.Response.ContentType = "application/json"; 
      context.Response.Write(string.Format("{0}({1});", context.Request["jsoncallback"], jsonstr)); 

ответ

3

Недавно я боролся с этим, как хорошо .... вот очень упрощенная версия моего решения, которое включает в себя основной необходимый код.

Я столкнулся с проблемами перекрестного домена, пытаясь передать json на страницу ashx и получить данные json с этой страницы ashx. В этом примере я отправляю SessionKey на страницу ashx и возвращает идентификатор объекта.

JQuery AJAX вызов со страницы клиента:

function CallASHXPage() 
{ 
    var strJson = '{ "Request": { "SessionKey": "ABCD-1234" } }'; 

    return $.ajax({ 
     url: "http://localhost:55724/RemoteJsonpTest.ashx?data=" + strJson, 
     cache: false, 
     crossDomain: true, 
     dataType: "jsonp" 
    }).done(function(data) 
    { 
     // handle the output here 
     alert(data.Response.OutputID); 
    }); 
} 

Вот код на странице ASHX:

// read in data param 
string JSON = context.Request.QueryString["data"]; 

// execute your ASHX code here 

// prepare resposne data 
string strResponse = "{\n"; 
strResponse += "\t\"Response\":\n"; 
strResponse += "\t{\n"; 
strResponse += "\t\t\"OutputID\": "12345"\n"; 
strResponse += "\t}\n"; 
strResponse += "}\n"; 

// output response wrapped in callback function 
string output = context.Request.Params["callback"]; 
output += "(" + strResponse + ");"; 
context.Response.Write(output); 
+0

отсутствующего тип содержимого –