jQuery ajax调用在localhost上运行正常但不是远程调用

时间:2014-11-29 00:14:09

标签: asp.net ajax jquery-mobile

我一直在寻找答案,但仍然没有找到任何有帮助的东西。我正在开发一个phoneGap + jqm应用程序,在开发的时候,我已经通过chrome和我的asp.net项目的本地实例(在localhost和visual studio developmentserver上运行)进行了测试。我甚至在服务器端将js调用作为JSONP处理。一切正常,因为我正在使用locahost,但在将asp项目发布到服务器后,我没有得到ajax调用的响应。我做错了什么?

这是jqm init的样子:

    $.support.cors = true;
    $.mobile.allowCrossDomainPages = true;
    $.mobile.phonegapNavigationEnabled = true;

    $.mobile.linkBindingEnabled = true;
    $.mobile.ajaxEnabled = true;

 $.ajax({
            async: isAsync,
            crossDomain: true,
            timeout: 5000,
            url: "https://pathToService/MobileService.asmx/" + methodName,
            data: dataAry,
            dataType: "jsonp",
            beforeSend: function () {
                // This callback function will trigger before data is sent
                $.mobile.loading('show', { theme: "a", text: "Loading...", textonly: false, textVisible: false }); // This will show AJAX spinner
            },
            complete: function () {
                // This callback function will trigger on data sent/received complete
                $.mobile.loading('hide'); // This will hide AJAX spinner
            },
            success: function (succResult) {
                callback(succResult)
            },
            error: function (errorResult) {
                app.showAlert("Es ist ein Fehler bei dem Verbindungsaufbau zum Server aufgetreten. Bitte versuchen Sie es zu einem späteren Zeitpunkt nochmal.", "Fehler")
            }
        })

我也尝试过没有https但同样的事情。我还通过浏览器和SOAP客户端检查了服务并得到了有效的响应。

这是服务器端方法之一:

            <WebMethod> _
<ScriptMethod(UseHttpGet:=True, ResponseFormat:=ResponseFormat> _
Public Sub IsSystemAvailable(callback As String)
        CompleteRequest(callback, True)
    End Sub

Private Sub CompleteRequest(callback As String, objectToSerialize As Object)
    Dim sb As New StringBuilder()
    Dim js As New JavaScriptSerializer()
    sb.Append(callback & "(")
    sb.Append(js.Serialize(objectToSerialize))
    sb.Append(");")

    Context.Response.Clear()
    Context.Response.ContentType = "application/json"
    Context.Response.Write(sb.ToString())
    Context.Response.[End]()
End Sub

来自ajax处理程序没有真正的错误,只是控制台记录以下输出:

 GET https://pathToWebservice/MobileService.asmx/Log…ino&password_hash= some hash           jquery-1.10.2.min.js:6 
send                                        jquery-1.10.2.min.js:6 
x.extend.ajax                               index.js:266 
doRequestWith                               index.js:242 
CheckLoginSynchroniously                    index.js:151 
app.loginToHQ                               index.html:34 
onclick

任何想法??

1 个答案:

答案 0 :(得分:1)

您是否在服务器端启用了跨域?

Access-Control-Allow-Origin:* 访问控制请求方法:PUT,GET,POST

http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api