2013-08-02 4 views
1

У меня проблема с веб-службой, которая находится в междоменном домене. Я прочитал некоторые статьи об этом, но я действительно не нашел решения. Я только что понял, что мне нужен формат данных json, потому что я всегда получал Error: Access denied., пытаясь получить данные от службы xml, но теперь у меня другая проблема. Вот мой .ajax() вызов:Вызов веб-службы из jQuery .ajax() issue

$.ajax({ 
      type: "GET", 
      contentType: "application/jsonp; charset=utf-8", 
      url: "http://tomas/_vti_bin/EmmaService.asmx/GetResult", 
      dataType: "jsonp", 
      data: { 
       value : "testValue", 
       converstionId : "testId" 
      }, 
      success: function(resp) { 
       alert("success: " + resp); 
      }, 
      error: function (xhr, ajaxOptions, thrownError) { 
       alert("error status: " + xhr.status); 
       alert("error status text: " + xhr.statusText); 
       alert("error response text: " + xhr.responseText); 
      }, 
     }); 

От этого я получаю сообщение об ошибке с 3 следующих предупреждений:

error status: 200 
error status text: success 
error response text: undefined 

То, что я не понимаю error status text: success.

код в моем веб-службы:

[WebMethod(EnableSession = false, Description = "Gets result")] 
    public EmmaServiceResult GetResult(string value, string converstionId) 
    { 
     ... 
     return result; 
    } 

Любые предложения о том, как получить эту работу? Благодаря! :)

+0

Примечание: я не могу изменить веб-сервис, он используется другими решениями, и мне нужно, чтобы он правильно и корректно работал без какого-либо кода, просто javascript, потому что я создаю приложение SharePoint 2013, который не позволяет использовать код:/ –

+0

Можете ли вы запустить это внутри Firebug на Firefox и/или Chrome Web Inspector, а затем вырезать и вставить весь запрос (в тексте) и ответ (то же самое) на вопрос? – deitch

+0

Проверьте консоль javacript и вкладку сети в инструментах разработчика вашего браузера. Найдите ошибки и посмотрите на ответ xhr, чтобы убедиться, что это то, что вы ожидаете. –

ответ

2

Попробуйте добавить ?callback=? в конце вашего URL:

http://tomas/_vti_bin/EmmaService.asmx/GetResult?callback=? 

Кроме того, попробуйте посмотреть на thrownError, чтобы определить, что ошибка:

alert("error response text: " + thrownError); 

Это может быть ошибка синтаксического анализа и т. д., что-то не связано с запросом ajax, но как вы определяете, как следует обрабатывать ответ.

Также посмотрите here, чтобы узнать, как вернуть json из службы WCF.

[WebInvoke(Method = "GET", 
      RequestFormat = WebMessageFormat.Json, 
      ResponseFormat = WebMessageFormat.Json, 
      UriTemplate = "players")] 
+0

Я изменил его на' xhr.thrownError' и он все равно возвращает 'undefined':/ –

+0

Извините, я отредактировал свой ответ. Попробуйте просто thrownError –

+0

теперь я получаю «текст ответа об ошибке: jQuery ... много номеров ... не был вызван» –

0

У меня недавно появилось много проблем при работе с кросс-доменным запросом от вызова AJAX. Мы закончили тем, что работаем без изменения API, но нам нужен доступ к серверу, на котором размещен API, чтобы мы могли отправить его в ответ на некоторые заголовки. Но вся проблема была болью для отладки, и я обнаружил, что все браузеры были ужасны в отношении сообщения значимых ошибок. Возможно, это может не сработать для вас и извиниться заранее, если это не поможет решить вашу проблему.

Решение требует, чтобы вы сделали запрос CORS и добавили некоторые заголовки в ответ на ваш сервер. Эти страницы были как хорошие ресурсы:

https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS http://www.html5rocks.com/en/tutorials/cors/

Я думаю, в вашем случае, так как вы делаете основной запрос, и вы не имеем дело с печеньем, вы можете оставить свой .ajax вызов без существенных изменений , просто изменяя dataType на «json» и contentType на «application/json», если вы отправляете JSON.

тогда Вам придется изменить сервер, чтобы он обрабатывать предполетной запрос CORS путем добавления этих заголовков в ответ:

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET 
Access-Control-Allow-Headers: Content-Type 

(См этот вопрос: jQuery CORS Content-type OPTIONS)

Надеюсь, это будет работа для вас!