Кажется, что все настройки и атрибуты созданы для того, чтобы веб-сервис возвращал JSON, но я заметил в вашем запросе jQuery, что вы не указываете тип содержимого данных, которые вы передаете. Я добавил его в код ниже:
$.ajax({
url: "http://tonofweb.com/MyService.asmx/Sum",
contentType: "application/json; charset=utf-8",
data: { x: JSON.stringify("1"), y: JSON.stringify("2") },
dataType: "jsonp",
success: function (json) {
alert(json.d);
},
error: function () {
alert("Hit error fn!");
}
});
Обратите внимание, я добавил contentType: "application/json; charset=utf-8",
в настройки запроса.
Я проверил этот код, перейдя к http://tonofweb.com (который в настоящий момент возвращает 403), включая jQuery с использованием jQuerify букмарклета , а затем сначала запускаю код из вашего вопроса ( без contentType), а затем код, который я разместил выше ( с contentType).
Вот ответы на вкладке Сеть в Инструментах разработчика Chrome:
Без contentType :
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">"Now i am getting jsop string""2nd param"</string>
С contentType :
{"d":"12"}
Таким образом, второе, по крайней мере, приводит к возвращению JSON с сервера. Поэтому при прочих равных условиях я бы добавил addType.
См. Здесь для объяснения требований для возврата JSON:
ASMX и JSON - Распространенные ошибки и неправильные представления
В HTTP-запросе должен быть указан тип содержимого application / json. это
сообщает ScriptService, что он получит свои параметры в виде JSON
и что он должен ответить тем же.
Теперь у вас все еще есть другая проблема, и это то, что запрос после завершения вызывает функцию ошибки. Если вы измените dataType: "jsonp"
на dataType: "json"
, это вызовет функцию успеха. Так что что-то в вашей реализации оболочки обратного вызова неверно, потому что jQuery не может обработать ответ как JSONP.
Теперь я также не вижу обратного вызова, завернутого в ответ, для JSONP ответ должен выглядеть примерно так:
jQuery17106476630216930062_1326752446188({"d":"12"})
Я заметил, что вы ссылаетесь на этот пост о том, как сделать ответ JSONP от веб-службы, но вы не следуете совету: вы не используете Response.Filter
, вместо этого вы используете Response.Write
.