Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 开发人员和发布版本之间的URL路径更改_Javascript_Jquery_Asp.net_Iis - Fatal编程技术网

Javascript 开发人员和发布版本之间的URL路径更改

Javascript 开发人员和发布版本之间的URL路径更改,javascript,jquery,asp.net,iis,Javascript,Jquery,Asp.net,Iis,我刚得到Scott Hanselman与SignalR合作的ASP.NET MVC 4。经过数小时的配置、尝试和错误,以及让不同版本的Windows在我的家庭网络上相互通信之后,一切都正常了,只剩下一个问题我不知道如何处理 这一行javascript必须更改,这取决于我是通过Visual Studio还是已发布(IIS)版本运行应用程序: 在VS内运行时有效: var connection = $.connection('echo'); var connection = $.connectio

我刚得到Scott Hanselman与SignalR合作的ASP.NET MVC 4。经过数小时的配置、尝试和错误,以及让不同版本的Windows在我的家庭网络上相互通信之后,一切都正常了,只剩下一个问题我不知道如何处理

这一行javascript必须更改,这取决于我是通过Visual Studio还是已发布(IIS)版本运行应用程序:

在VS内运行时有效:

var connection = $.connection('echo');
var connection = $.connection('ChatWithSignalR/echo');
http://localhost:9145/
http://localhost/ChatWithSignalR
适用于已发布版本:

var connection = $.connection('echo');
var connection = $.connection('ChatWithSignalR/echo');
http://localhost:9145/
http://localhost/ChatWithSignalR
当我在VS中运行时,URL是:

var connection = $.connection('echo');
var connection = $.connection('ChatWithSignalR/echo');
http://localhost:9145/
http://localhost/ChatWithSignalR
发布的版本是:

var connection = $.connection('echo');
var connection = $.connection('ChatWithSignalR/echo');
http://localhost:9145/
http://localhost/ChatWithSignalR
如果我不更改该行代码,并尝试在VS中使用包含ChatWithSignalR的javascript运行该应用程序,我会遇到如下错误:

Failed to load resource: the server responded with a status of 404 (Not Found)

http://localhost:9145/ChatWithSignalR/echo/negotiate?_=1347809290826
我该怎么做才能使用相同的javascript代码并使其在两种情况下都能工作?

var connection = $.connection('??????');
注意,这是我的Global.asax.cs:

RouteTable.Routes.MapConnection<MyConnection>("echo", "echo/{*operation}");
RouteTable.Routes.MapConnection(“echo”,“echo/{*operation}”);

这是您需要注意的事情,因为信号器库不知道应用程序部署到哪里以及它的根地址是什么。我在web应用程序中经常做的事情是使用一个名为
site\u root
的全局Javascript变量,并将其设置为站点根的绝对URL。现在,要做到这一点,您需要服务器标记来计算和打印它,比如
,或者服务器语言的任何语法。然后,在Javascript中引用URL时,应始终使用site_root+“/echo”(根据服务器变量/方法打印的内容,有无开头“/”。所以你会有这样的想法:

<script type="text/javascript">
    var site_root = "<%= RootUrl %>";

    // Later, wherever in your code:
    function doSomething() {
        var echo_url = site_root + "/echo";
        // Now you have an absolute URL for the echo page
    }
</script>

var site_root=“”;
//稍后,在代码中的任何位置:
函数doSomething(){
var echo\u url=site\u root+“/echo”;
//现在您有了echo页面的绝对URL
}

现在,我把它放在总是包含在其中的主布局页面中,就像主布局页面一样,或者取决于您使用的服务器语言。此外,您可以使用某种方法解析URL,而不是像
RootUrl
这样的变量,只需向其传递一个空字符串或“/”即可获得应用程序的根URL。

这种想法非常有效。非常感谢。我使用了这个:
var rootUrl='@Url.Content(“~”)
var连接=$.connection(rootUrl+'echo')太棒了,没问题!我很高兴您可以使用我的示例来准确地了解您需要做什么来创建
rootUrl
变量并正确使用它。