2011-01-10 2 views
1

У меня есть jQuery.ajax-вызов на событие нажатия кнопки на моей веб-странице. Этот вызов ajax отправляет довольно много разметки на сервер. После некоторой обработки сервер отправляет обратно небольшой URL-адрес. Иногда это прекрасно работает, но в других случаях нет. У меня есть точка останова перед вызовом ajax, а также некоторые из них в моем WebMethod. Похоже, что иногда WebMethod даже не попадает.jQuery.ajax вызов иногда не срабатывает C# WebMethod

Что может вызвать отказ .ajax? Я предполагаю, что в параметрах, которые я отправляю, должно быть что-то. Но я escape с разметкой.

У кого-нибудь есть идеи?

$.ajax({ 
    type: 'POST', 
    url: 'WebServices.asmx/GetBitmapPathForVML', 
    contentType: 'application/json; charset=utf-8', 
    data: '{"sVML" : "' + escape($('#divChart')[0].innerHTML) + 
     '","width" : 800,"height": 600}', 
    dataType: 'json', 
    success: function(result) { 
      var newWindow = window.open ("", "Chart",""); 
      //blah blah 
      newWindow.document.write("<BODY>"); 
      newWindow.document.write(
       '<img src="file" alt="Chart"></img>'.replace('file',result.d) 
      ); 
      newWindow.document.write("</BODY>");  
      //blah blah 
    } 
}); 
+0

Можете ли вы ударить по службе все время в противном случае, если вы не отправите ничто (null) в метод? – dexter

+1

Проверьте параметры «error» и «timeout» для jQuery ajax, которые должны вам помочь. Также, если есть некоторые проблемы с тем, как вы вызываете веб-сервис, вы должны получить ошибку скрипта от клиента. –

+0

@Max Да, я так считаю –

ответ

1

Не нравится отвечать на мой собственный вопрос (не то, чтобы я был на самом деле). Но проблема была связана с максимальным свойством длины JSON.

Я нашел answer here

..и добавил это к моему WebConfig ...

<system.web.extensions> 
    <scripting> 
     <webServices> 
      <jsonSerialization maxJsonLength="2097152"/> 
     </webServices> 
    </scripting> 
</system.web.extensions>  

Спасибо за все ответы, ребята, особенно о ловле ошибок.

2

Я бы порекомендовал вам переписывать свой метод так:

$.ajax({ 
    type: 'POST', 
    url: 'WebServices.asmx/GetBitmapPathForVML', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify({ 
     sVML: $('#divChart').html(), 
     width: 800, 
     height: 600 
    }), 
    dataType: 'json', 
    success: function(result) { 
     var newWindow = window.open ("", "Chart",""); 
     //blah blah 
     newWindow.document.write("<BODY>"); 
     newWindow.document.write(
      '<img src="file" alt="Chart"></img>'.replace('file',result.d) 
     ); 
     newWindow.document.write("</BODY>");  
     //blah blah 
    } 
}); 
+0

Какую библиотеку мне нужно использовать 'JSON.stringify'? –

+0

['json2.js'] (https://github.com/douglascrockford/JSON-js). Но этот метод изначально реализован в современных браузерах, и библиотека просто делегирует вызов встроенному методу, если поддерживается. Поэтому, если вы используете современный браузер, вам не нужно ничего включать. –

+0

Боюсь, я вынужден развиваться для IE6. : O –

1

Эль Ronnoco,

Я хотел бы предложить вам, чтобы добавить сообщение об ошибке: Обратный вызов, чтобы проверить, что происходит. Возможно, вы можете получить полезную информацию от этого.