Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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 Breeze.js返回一个错误'';(分号和空格)_Javascript_Breeze - Fatal编程技术网

Javascript Breeze.js返回一个错误'';(分号和空格)

Javascript Breeze.js返回一个错误'';(分号和空格),javascript,breeze,Javascript,Breeze,昨天我让我的Breeze代码与我的WCF数据服务一起工作 然后今天,它就停止工作了!当我运行查询时,我得到一条错误消息“;”(一个分号和一个空格)来自breeze error对象中的所有其他内容看起来都很正常(我是breeze的新手,所以可能有一些我不知道的东西需要查找) 你知道这是什么原因吗 更新: 当我在调试器(在我的机器上)中运行WCF数据服务时,一切都正常但当我在服务器上运行它时,会出现上述错误 我能想到的唯一一件事是跨领域的东西没有正常工作。以下是我的跨域代码: protected v

昨天我让我的Breeze代码与我的WCF数据服务一起工作

然后今天,它就停止工作了!当我运行查询时,我得到一条错误消息“;”(一个分号和一个空格)来自breeze

error对象中的所有其他内容看起来都很正常(我是breeze的新手,所以可能有一些我不知道的东西需要查找)

你知道这是什么原因吗

更新:

当我在调试器(在我的机器上)中运行WCF数据服务时,一切都正常但当我在服务器上运行它时,会出现上述错误

我能想到的唯一一件事是跨领域的东西没有正常工作。以下是我的跨域代码:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    EnableCrossDomain();
}

static void EnableCrossDomain()
{
    string origin = HttpContext.Current.Request.Headers["Origin"];
    if (string.IsNullOrEmpty(origin)) return;
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", origin);
    string method = HttpContext.Current.Request.Headers["Access-Control-Request-Method"];
    if (!string.IsNullOrEmpty(method))
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", method);
    string headers = HttpContext.Current.Request.Headers["Access-Control-Request-Headers"];
    if (!string.IsNullOrEmpty(headers))
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", headers);
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true");
    if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
    {
        HttpContext.Current.Response.StatusCode = 204;
        HttpContext.Current.Response.End();
    }
}
下面是我如何称呼它的一个例子:

function getBags() {

    var bags;
    var query = breeze.EntityQuery.from('Bags');

    return manager.executeQuery(query).then(querySucceded, _queryFailed);

    function querySucceded(data) {
        bags = data.result;
        logSuccess("Retrieved Bag Data")
        return bags;
    }
}

function _queryFailed(error) {
    logError(config.appErrorPrefix + "Query Failed: " + error.message);
    throw error;
}

有没有更好的方法允许使用Breeze和WCF数据服务进行跨域调用?

我将研究@Guilherme建议的意外缩小和缺少分号;在
logSuccess
之后,您可能还有其他人

请回顾“”中的步骤,特别注意电线上的实际情况;浏览器工具或Fiddler可能在这里有所帮助

您在实施CORS方面的努力不太可能是原因,但这是可能的。在调用
.End()
之前,您是否检查了
响应的内容?当然,您始终可以从提交到代码正常工作的时间点进行反向工作。您正在使用版本控制,是吗

我认为您已经消除了您的BreezeJS代码副本在“昨天和今天”之间发生更改的可能性

科尔斯
请重新考虑你的手摇CORS努力。WebAPI v.2提供了一个良好的CORS工具。你知道这件事吗?如果是这样的话,您不使用它有什么原因吗(看起来您没有使用它)?

我遇到了类似的问题,收到“;”错误消息,我也在使用CORS。Breeze在尝试为您的响应找到正确的处理程序时出错。它没有在返回的标题中获取“DataServiceVersion”的值,Breeze正在response.body.message中查找错误消息,但该消息为空,因此您只获取“;”。理想情况下,此错误报告应该有一些友好的文本,告诉您正文消息为空或不存在

我的解决方案是使用Mike Wasson CORS设置,使用Ward在其回答中提供的链接。我以前使用过SimpleCorsHandler.cs类,该类在Breeze提供的ToDo应用程序示例中使用,但它没有在选项请求的“Access Control Allow Headers”标题值中返回“DataServiceVersion”。我不确定是否可以配置SimpleCorsHandler来解决这个问题;eaiser需要删除SimpleCorsHandler,并在WebApiConfig.cs的Register方法中使用以下两行:

var cors = new EnableCorsAttribute("*", "*", "*", "DataServiceVersion, MaxDataServiceVersion");
config.EnableCors(cors);

(有关参数的更多信息,请参阅EnableCorsAttribute文档;对于第一个参数使用“*”不是一个好主意,但这里只是一个示例。)Breeze仍然为每个服务调用运行选项请求,然后根据选项响应执行GET请求,该响应现在包括允许DataServiceVersion标头。GET请求获取DataServiceVersion标头(我的值为3.0),错误消失。

尝试发布一些代码,更加注重细节,…@user3165879-有一些代码适合您。尝试
logSuccess(“检索到的行李数据”)(在日志成功后添加
)?也许你的服务器“迷你们”codes@GuilhermeNascimento-我添加了缺少的分号,但没有帮助。(不管怎样,当我的OData来自服务器时,该方法永远不会被调用,因为调用了一个错误)。听起来像是JSON中的一个问题(由服务器返回)。能否使用浏览器的“Web工具”捕获返回的申请?我使用的是WCF数据服务(不是Web API)。我不认为Mike Wasson描述的功能适用于WCF数据服务。。。我会看看你发送的链接并尝试一下。奇怪的是,如果我在调试器中托管WCF数据服务并用breeze指向该服务,那么一切都可以正常工作。我只有在与服务器上的IIS中托管的代码完全相同时才会出现此错误。我启动了fiddler,当我在本地运行WCF数据服务时,有两个调用通过我的breeze查询进行。一次用于元数据,一次用于数据。当我在服务器上运行它时,有4个调用。元数据和数据调用之前有一个“选项”调用。逐步浏览breeze和datajs代码表明,这个选项调用混淆了它。(它没有像DataServiceVersion那样预期的头。)最后,在jsonParser中遍历的调用失败,因为它跳过了jsonLightReadPayload调用(因为它没有DataServiceVersion)。所以您是说查询负载返回了,但是客户端上的某个东西导致结果变为“;”?那太奇怪了。你提到DataServiceVersion和jsonLight也让我感到困惑。我想,如果CORS导致了这个问题,那是因为您被阻止跨源发送所需的标题。这是你可能想要研究的东西。我承认我没有调查过跨起源的奥达塔。让我们知道您学到了什么。我突然想起“;”是DataJS告诉您它在试图理解响应时死亡的方式。这不是很有帮助。我担心您将不得不通过它进行调试,直到您能够确定它不喜欢响应的地方。我确实通过它进行了调试。我对COR的了解不足以了解期权调用的详细信息,但不知何故,我得到了数据,但标题中没有DataServicesVersion。由于我使用的是json light(V3),解析失败。如果我更新datajs,使其始终认为它有V3,那么一切正常。我更新了我的WCF数据服务,将DataServicesVersion作为选项调用标题的一部分返回,但不知何故datajs没有读取该标题。