任何人都可以告诉我如何使用jsonp调用ashx处理程序或告诉我我做错了什么吗?我在一个子域上有一个javascript函数,试图在另一个子域上调用ashx处理程序。当我尝试时,我返回状态200但它仍然进入我的错误处理并报告一个抛出的SyntaxError错误:无效的字符。我在jquery和jsonp上找到了几个线程,但只有一个实际显示了与ashx相关的代码。不幸的是它似乎不起作用,我不知道为什么。这是来自javascript调用的代码,然后是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));
答案 0 :(得分:3)
我最近也在努力解决这个问题....这是我的解决方案的一个非常简化的版本,其中包含基本的必要代码。
我在尝试将json传递到ashx页面并从该ashx页面检索json数据时遇到了跨域问题。在这个例子中,我将一个SessionKey发送到ashx页面,它返回一个对象的ID。
来自客户端页面的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);