2015-02-02 5 views
0

Я использую MVC 4 Web Api, и у меня есть требование предоставить конечную точку, которая может быть использована клиентами для визуализации кода на их веб-странице. Что-то вроде этогоДинамически генерировать код Javascript с сервера - MVC 4

<script type="text/javascript" src="http://server/endpoint"/> 

Когда выше линия включена в веб-страницы, сервер должен возвращать яваскрипта код, который должен быть автоматически выполняться.

Например, если сервер возвращает код - alert('hello'), то веб-страница клиента (с использованием сценария) должна автоматически всплывать «привет».

Код на стороне сервера может быть следующим. В этом случае сервер возвращает код javacript для записи таблицы в браузере. В основном это используется для возврата списка публикаций для конкретного профессора в университете. Enpoint подвергается, так что люди могут включать сценарий в своих веб-страницах, чтобы показать свои публикации

// GET api/values/5 
     public string Get(int id) 
     { 

      var html = "<table><tbody>"; 
      html += "<tr>"; 
      html += "<td>row 1, col 1</td>"; 
      html += "<td>row 1, col 2</td>"; 
      html += "</tr>"; 
      html += "<tr>"; 
      html += "<td>row 2, col 1</td>"; 
      html += "<td>row 2, col 2</td>"; 
      html += "</tr>"; 
      html += "</tbody></table>"; 
      var script = string.Format(@"<script type='text/javascript'>document.write('{0}')</script>", html); 
      return script; 
     } 

Любые мысли, как это может быть достигнуто. Я пробовал использовать Response.Write("alert('hello')"), но он не работает.

+0

Считаете ли вы использование [HttpHandler] (https://support.microsoft.com/kb/308001)? – Richard

ответ

0

1 - Если вы используете конечную точку в теге скрипта, вам не нужно переписывать тег сценария внутри метода get.

2 - Код, который вы пытаетесь вернуть, не является кодом javascript, это html-код и не будет запускаться при вызове, а в теге скрипта.

3 - попытаться сделать это:

HTML:

<script type="text/javascript" src="http://server/endpoint"/> 

WebAPI:

public string Get(int id) 
{ 
    return "alert('hello world');"; 
} 
+0

Работает ли это для вас? Моя конечная точка - http: // localhost: 49209 /. У меня есть ajax get, когда запрос приходит к конечной точке - $ .get ('/ api/values ​​/ 5'), и он возвращает строку - «alert (« hello »)» ;. Это рассматривается как строка html, а скорее выполняется как javascript-код. Что я делаю не так? –

+0

Вы пробовали как мой пример? В моем примере я не использую вызов ajax, я использую конечную точку в теге скрипта src. Как вы спрашивали в вопросе. –

0

Я использую службы WCF с конечной точкой REST, и мой сценарий был также обрабатывается как строка, так как она была получена котировкой между двойными кавычками.

"alert('hello world');" вместо alert('hello world');

Я нашел решение здесь: https://viswaug.wordpress.com/2008/05/22/customizing-the-response-serialization-in-wcf-rest-services/

Вы должны установить тип содержимого ответа на application/x-javascript и обернуть строку внутри MemoryStream, как это:

public Stream GetSomeScript() 
{ 
    WebOperationContext context = WebOperationContext.Current; 
    context.OutgoingResponse.ContentType = "application/x-javascript"; 

    const string TEXT_TO_SEND = "alert('hello world');"; 

    MemoryStream ms = new MemoryStream(); 
    StreamWriter sw = new StreamWriter(ms); 
    sw.Write(TEXT_TO_SEND); 
    sw.Flush(); 
    ms.Position = 0; 
    return ms; 
} 

Надеюсь, что это поможет.